首页 > 其他分享 >js 如何拍平一个对象

js 如何拍平一个对象

时间:2024-08-01 21:39:48浏览次数:12  
标签:flattenedObject const 拍平 对象 nestedObject js _. key obj

在 JavaScript 中,你可以使用递归或一些现成的库来实现对象的扁平化。如果你希望手动实现,可以考虑以下方法之一:

  1. 递归方法

    function flattenObject(obj, prefix = '') {
        return Object.keys(obj).reduce((acc, key) => {
            const pre = prefix.length ? prefix + '.' : '';
            if (typeof obj[key] === 'object' && obj[key] !== null) {
                Object.assign(acc, flattenObject(obj[key], pre + key));
            } else {
                acc[pre + key] = obj[key];
            }
            return acc;
        }, {});
    }
    
    // 示例用法:
    const nestedObject = {
        a: {
            b: {
                c: 1,
                d: 2
            },
            e: 3
        },
        f: 4
    };
    
    const flattenedObject = flattenObject(nestedObject);
    console.log(flattenedObject);
    

    这个函数 flattenObject 会将嵌套的对象 nestedObject 转换为扁平化的对象 flattenedObject

  2. 使用现成的库:也可以使用像 lodash 这样的库,它提供了 _.flatten()_.flattenDeep() 方法来帮助扁平化数组和对象。

    const _ = require('lodash');
    
    const nestedObject = {
        a: {
            b: {
                c: 1,
                d: 2
            },
            e: 3
        },
        f: 4
    };
    
    const flattenedObject = _.flattenDeep(_.toPairs(nestedObject).map(([key, value]) => {
        if (_.isObject(value)) {
            return _.toPairs(value).map(([subKey, subValue]) => [`${key}.${subKey}`, subValue]);
        }
        return [[key, value]];
    }));
    
    console.log(Object.fromEntries(flattenedObject));
    

    这里的 _.toPairs() 将对象转换为键值对数组,然后使用 _.flattenDeep()_.toPairs() 结合使用来实现扁平化。

选择哪种方法取决于你的具体需求和项目的要求。

标签:flattenedObject,const,拍平,对象,nestedObject,js,_.,key,obj
From: https://www.cnblogs.com/jocongmin/p/18337624

相关文章

  • lodash get 使用,js如何实现lodash get
    lodashgetlodash的get方法,它主要用于安全地访问对象的属性,避免因为中间属性不存在而导致的异常。这个方法可以按照指定的路径获取对象的属性值。比如,假设有一个对象user,包含了name和address属性,你可以这样使用get方法:const_=require('lodash');constuser={......
  • 创建对象赋值的顺序
    publicclassStudent6{privateStringname="魏一民";privateintage=18;publicStudent6(){}publicStudent6(Stringname,intage){this.name=name;this.age=age;}publicStringgetName(){......
  • javascript学习 - 面向对象
    什么是对象之前学习的数据类型在存储一些复杂的信息时,十分不方便,而且也难以区分。为此,为了更加详细方便的描述某一个事物,因而提出面向对象的概念。那什么是对象呢?所谓对象,也是JavaScript中的一种数据类型,可以看做是一系列无序数据的集合。有了对象,就可以用来描述某一......
  • Jmeter(五十二)PostMan的json格式文件转换为jmx文件
    他年我若为青帝,报与桃花一处开               ---黄巢一、环境准备1.maven2.postman3.jmeter 二、将PostMan的接口请求导出来  export即可三、拉取项目并构建gitclonehttps://github.com/Loadium/postman2jmx.git拉取完成进行......
  • “postman请求JSON格式,Body内数据无法被idea后端接收,值为null“问题的解决方式
    问题描述:传递数据一切正常,但是:原因剖析:这是因为我们实体类里面属性的命名格式不符合驼峰命名,比如我这种“大写字母开头如CAD”/“一个小写字母+一个大写字母如aDddddd”都不行。解决方法:方法1:不推荐,不好用把自己实体类中的属性的名字都改成标准格式,要么是“全小写如id......
  • 面向对象的基本概论
    一、面向对象与面向过程1.什么是面向过程?面向过程就是分析一个问题所需要的解决步骤,然后用函数把这些步骤一步一步的给实现,使用的时候一个一个的依次调用即可。比如:洗衣服按照面向的过程思想:第一步:我把洗衣机门打开第二步:把衣服放入洗衣机里第三步:我倒入洗衣液第四步:......
  • es6-promise-polyfill 自己实现promise.js
       https://github.com/lahmatiy/es6-promise-polyfill/blob/master/promise.js  (function(global){////CheckfornativePromiseandithascorrectinterface//varNativePromise=global['Promise'];varnativePromiseSupported=NativePr......
  • JSEncrypt 传输加密 -前端
    1.有些特殊要求,要求前端传给后端参数时把一些密码,手机号等加密,具体使用方式如下引入 jsencrypt.min.js,我是在app中使用,有些 jsencrypt.min.js文件只支持h5,使用的时候会报错,这个jsh5,app都可以使用,js文件内容在最下面import{JSEncrypt}from'@/common/utils/jsencrypt.m......
  • 我收到错误:“AttributeError:类型对象‘UserList’没有属性‘as_view’”,就像,它没有看
    我收到错误:“AttributeError:类型对象‘UserList’没有属性‘as_view’”,就像,它没有看到“as_view()”Userapp中的Myurls.pyfromdjango.urlsimportpathfrom.viewsimport*urlpatterns=[path('list',UserList.as_view(),name='user-view')]views.......
  • JSP学生宿舍管理系统599o3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
    系统程序文件列表用户功能:宿管,学生,班级,宿舍楼宇,宿舍分配,来访登记开题报告内容JSP学生宿舍管理系统开题报告一、选题背景与意义1.选题背景随着我国经济的飞速发展和科学技术的全面进步,以计算机技术、通信技术和数据库技术为基础的信息系统正处于蓬勃发展的黄金时......