首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将对象转换为lodash中具有父子关系的数组

可以使用lodash库中的toPairsgroupBy方法来实现。

首先,使用toPairs方法将对象转换为键值对的数组。然后,使用groupBy方法将键值对数组按照父子关系进行分组。

以下是一个示例代码:

代码语言:txt
复制
const _ = require('lodash');

function convertObjectToNestedArray(obj) {
  const pairs = _.toPairs(obj);
  const grouped = _.groupBy(pairs, ([key]) => {
    const lastDotIndex = key.lastIndexOf('.');
    return lastDotIndex === -1 ? key : key.slice(0, lastDotIndex);
  });

  const buildNestedArray = (group, parentKey) => {
    return group.map(([key, value]) => {
      const obj = { key, value };
      const children = grouped[parentKey + '.' + key];
      if (children) {
        obj.children = buildNestedArray(children, parentKey + '.' + key);
      }
      return obj;
    });
  };

  return buildNestedArray(grouped[''], '');
}

// 示例对象
const obj = {
  'a.b.c': 1,
  'a.b.d': 2,
  'a.e': 3,
  'f': 4
};

const result = convertObjectToNestedArray(obj);
console.log(result);

输出结果为:

代码语言:txt
复制
[
  {
    key: 'a',
    value: undefined,
    children: [
      {
        key: 'a.b',
        value: undefined,
        children: [
          {
            key: 'a.b.c',
            value: 1
          },
          {
            key: 'a.b.d',
            value: 2
          }
        ]
      },
      {
        key: 'a.e',
        value: 3
      }
    ]
  },
  {
    key: 'f',
    value: 4
  }
]

这样,我们就将对象转换为了具有父子关系的数组。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何 Java 8 流转换为数组

问题 Java 8 ,什么是流转换为数组最简单方式?...String[] stringArray = stringStream.toArray(size -> new String[size]); 其中 IntFunction generator 目的是数组长度放到到一个新数组中去...我们县创建一个带有 Stream.of 方法 Stream,并将其用 mapToInt Stream 转换为 IntStream,接着再调用 IntStream toArray...; 紧接着也是一样,只需要使用 IntStream 即可; int[]array2 = IntStream.rangeClosed(1, 10).toArray(); 回答 3 利用如下代码即可轻松一个流转换为一个数组...然后我们在这个流上就可以进行一系列操作了: Stream myNewStream = stringStream.map(s -> s.toUpperCase()); 最后,我们使用就可以使用如下方法将其转换为数组

3.9K10
  • Js数组对象某个属性值升序排序,并指定数组某个对象移动到数组最前面

    需求整理:   本篇文章主要实现一个数组对象属性值通过升序方式排序,然后能够让程序可以指定对应数组对象移动到程序最前面。...: 23},{name: "小芳", Id: 18}];   首先把数组Id值通过升序方式排序: //源数组 var arrayData= [{name: "夏明", Id:24}, {name:..., Id: 24 },{ name: "小红", Id: 25 }] 找到Id为23对象,移动到数组最前面去(注意Id值唯一): 实现原理:因为移除数组对象需要找到对应数组对象下标索引才能进行移除...,现在我们需要移除Id=23对象,让其排到最前面去(先找到对象下标,然后把给数组对象赋值给temporaryArry临时数组,然后在通过下标移除newArrayData对象值,最后arrayData...[currentIdx]); //移除数组newArrayId=23对象 newArrayData.splice(currentIdx,1);//从start[一般为对象索引]位置开始向后删除

    12.3K20

    推荐一波实用高效 NPM 工具包,总有几款适合你

    实用工具 Lodash lodash[1]是一套现代 JavaScript 实用程序库,提供模块化、性能与多种附加功能。可提供关于 JavaScript 数组对象及其他数据结构多种实用功能。...{ 'user': 'fred', 'age': 40 }, { 'user': 'fred', 'age': 48 }, ]; */ qs `qs`[2] 处理 URL 查询字符串,支持内嵌对象数组...// 浏览器上 URL地址参数转换为对象(字符串对象) const urlParams = parse(window.location.href.split("?")...[1]); // 用途二 // 将对象参数 传递给到后端接口--GET 请求 (对象字符串) const params = { name: "wang", age: "18", sex...nodemon 监视启动目录文件,如果有任何文件更改,nodemon 将自动重新启动 node 应用程序。

    4.2K40

    让我告诉你一些强无敌 NPM 软件包(超实用,收藏!)

    实用工具 Lodash lodash[1]是一套现代 JavaScript 实用程序库,提供模块化、性能与多种附加功能。可提供关于 JavaScript 数组对象及其他数据结构多种实用功能。 ?...{ 'user': 'fred', 'age': 40 }, { 'user': 'fred', 'age': 48 }, ]; */ qs `qs`[2] 处理 URL 查询字符串,支持内嵌对象数组...qs-github 安装及示例 yarn add qs import { parse, stringify } from "qs"; // 用途一 // 浏览器上 URL地址参数转换为对象(字符串对象...[1]); // 用途二 // 将对象参数 传递给到后端接口--GET 请求 (对象字符串) const params = { name: "wang", age: "18", sex...nodemon 监视启动目录文件,如果有任何文件更改,nodemon 将自动重新启动 node 应用程序。

    3K30

    Java学习笔记(12)对象

    Daughter extends Parent {} 子类父类 Son son = new Son(); Parent parent = (Parent) son; 运行没问题 父类引用指向子类父类对象...//也可以理解为一个子类对象转化为父类对象(隐形转型,自动),小类大类 Person one = new Person(); one.run(); Person...two = new Student(); // 父类引用子类实例,可以调用子类重写父类方法以及父类派生方法,无法调用子类独有的方法 // 注意:父类静态方法无法被子类重写...() 会报错, obj是父类Person对象实例,需要将obj转换为Student类型,才可以使用Student类型方法 Student student = (Student) obj;...父类引用指向子类对象 2. 把子类转换为父类,向上转型,直接; 3. 把父类转换为子类,向下转型,强制转换; 4. 方便方法调用,减少重复代码,简洁 */ } }

    46830

    让我告诉你一些强无敌 NPM 软件包

    实用工具 Lodash lodash是一套现代 JavaScript 实用程序库,提供模块化、性能与多种附加功能。可提供关于 JavaScript 数组对象及其他数据结构多种实用功能。...简而言之,就是将对象和 URL 地址参数互相转换 安装及示例 yarn add qs 复制代码 import { parse, stringify } from "qs"; // 用途一 // ...浏览器上 URL地址参数转换为对象(字符串对象) const urlParams = parse(window.location.href.split("?")...[1]); // 用途二 // 将对象参数 传递给到后端接口--GET 请求 (对象字符串) const params = { name: "wang", age: "18", sex...nodemon 监视启动目录文件,如果有任何文件更改,nodemon 将自动重新启动 node 应用程序。

    1.9K20

    深入理解JavaScript函数式编程

    查找数组具有空白数组函数 console.log(findSpace(['jonm Connm','Jone_Done'])); ❝闭包本质就是内部函数可以访问外部函数成员,而柯里化解决是函数多个参数函数进行分解最小粒度问题...fp模块 如下代码,在_.map对某个数组执行将数组元素转换为Number类型,但是结果打印却是:23 NaN 2 这是为什么呢?...//先切割字符串变成数组,map数组每一个元素转换为大写,map数组获取数组元素首字母 const firstLetterToUpper = fp.flowRight(fp.join(', '...这些问题引入了函子概念 Fuctor函子 容器:包含值和值变形关系(这个变形关系就是函数) 函子:是一个特殊容器,通过一个普通对象来实现,该对象具有map方法,map方法可以运行一个函数对值进行处理...,of方法是为了避免使用new来创建对象,更深层含义是of方法用来把值放到上下文Context(把值放到容器,使用map来处理值) 其实上述函子都是Pointed函子。

    4.3K30

    你不知道 JavaScript 卷(1、类型)

    显示类型转换 在某些情况下,程序员需要手动一个类型转换为另一个类型。例如,您可能需要将一个字符串转换为一个数字,或者一个布尔值转换为一个字符串。..." 隐式类型转换 JavaScript引擎在必要时会自动一个类型转换为另一个类型,不需要程序员手动进行转换。...is 42" 强制类型转换 强制类型转换是一种特殊显式类型转换,它是一个非布尔类型值转换为布尔类型值。...在JavaScript,有一些值会被转换为false,这些值被称为“假值”,其他所有值都被转换为true。...第三方库 如今,有很多第三方库可以帮助我们实现判断变量类型,以下是一些常用LodashLodash是一个实用JavaScript工具库,提供了许多常见操作函数,包括类型检查。

    30630

    Lodash那些“多余”和让人眼前一亮 API

    采用函数类API,多数API都不修改传入参数; Lodash功能强大,涵盖了前端开发能遇到大部分逻辑功能点,使用Lodash能大大提高我们开发效率。但这也有一个弊端:便利往往会使我们变"懒"。...仁者见仁智者见智,Lodash带来便利同时,我们应该时刻记住:JavaScript才是我们根本; Lodash“多余”API并不多余,API内部处理了很多开发者常常忽略异常情况,使代码更加安全;...[3, [4]], 5]], 3) [1, [2, [3, [4]], 5]].flat(Infinity) // [1, 2, 3, 4, 5] fromPairs(entries类型数组换为对象...forEach(遍历数组对象) | forEachRight(反序遍历数组对象) // 遍历数组有点多余 lodash([1, 2]).forEach((val) => { console.log...filter) sample (抽签:集合随机取一个) sampleSize (抽签:集合随机抽取n个) shuffle (打乱) 五、函数 Function 下面列举是实际开发应用场景较多API

    3.5K10

    Python体系练手项目200例(附源代码),练完可显著提升python水平(鲲鹏编程–Python教育新物种)

    .动态删除属性 35.动态获取对象属性 36.对象是否有某个属性 37.isinstance 38.父子关系鉴定 39.所有对象之根 40.一键查看对象所有方法 41.枚举对象 43.创建 range...迭代器 44.反向 45.打包 46.过滤器 47.链式比较 48.链式操作 49.split 分割** 50.replace 替换 1.十十进制转换为二进制: >>> bin(10) '0b1010...' 2.十八 十进制转换为八进制: >>> oct(9) '0o11' 3 十十六 十进制转换为十六进制: >>> hex(15) '0xf' 4.字符串字节 字符串转换为字节类型...x 转换为整数。...38.父子关系鉴定 第二个参数可为元组: 39.所有对象之根 object 是所有类基类 40.一键查看对象所有方法 不带参数时返回当前范围内变量、方法和定义类型列表;带参数时返回参数

    3.4K30

    浅谈 Function Programing 编程范式

    相对而言,函数式编程思维则会尽量逻辑抽象拆解为可被复用若干最小单位,同样需求可能会这么实现: const { flow } = require("lodash/fp"); const toUpper...核心概念 FP(Functional Programming)是一种通过简单地组合一组函数来编写程序风格,它推荐我们几乎所有东西都包装在函数,编写大量可重用小函数,然后简单地一个接一个地调用它们以获得类似的结果...Immutable data 所有的数据都是不可变,这意味着如果想修改一个对象,那应该创建一个新对象用来修改,而不是修改已有的对象。...柯理化拆分,「Composition」合成 柯理化意义是具有多个参数多元函数转化为具有较少参数单元函数过程。...通过柯理化拆分和函数组合可以使得FP发挥很大效用,也是FP必不可少两步操作,可以柯理化后函数比作加工站,函数组合比作流水线。

    60830

    用 Mongoose 插件记录Node.js API日志

    现在已经有了 npm 日志记录模块。这些模块可以日志存储在不同格式或级别的文件。我们将使用流行ORM Mongoose 讨论 Node.js Express 程序 API 日志记录。...让我们分解上面的函数,看看发生了什么: _.transform: 它是数组 .reduce 替代品。它会迭代你对象 keys 和 values。它提供了一个 accumulator,是第一个参数。...isEqual:此方法支持比较数组数组缓冲区、布尔值、日期对象、错误对象、映射、数字、对象、正则表达式、集合、字符串、符号和类型化数组。...如果当前对象 value 不等于前一个对象相同属性值:base[key] 如果该值是对象本身,我们递归调用函数changes 直到它得到一个值,它最终将作为 result[key]=value 存储在...它将 document 转换为 Object()和transform:false是为了不允许转换返回对象

    2.8K40
    领券