javascript - 使用 lodash 在对象数组中展平数组

标签 javascript node.js lodash

我有一个这样的数组

[
    {
        name: "A",
        job: ["1", "2"]
    },
    {
        name: "B",
        job: ["2"]
    },
    {
        name: "C",
        job: []
    }
]

我如何使用 lodash 将它扁平化成这样的东西。

[
    {
        name: "A",
        job: ["1"]
    },
    {
        name: "A",
        job: ["2"]
    },
    {
        name: "B",
        job: ["2"]
    },
    {
        name: "C",
        job: []
    }
]

我想到的唯一解决方案是递归迭代。

谢谢。

最佳答案

如果您的对象不是多层深度,则无需使用递归。

相反,您可以在没有 lodash 和递归的情况下实现这一点。你可以使用 .flatMap获取每个 job 数组,然后使用 .map 为该 job 数组中的每个项目创建一个单独的对象.

请看下面的例子:

const arr = [{name: "A", job: ["1", "2"]}, {name: "B", job: ["2"]}, {name: "C", job: []}];

const spreadArrObj = arr => {
  return arr.flatMap(({name, job}) => {
    if(job.length < 2) return {name, job}; // if the object is empty or has one one object then return the object
    return job.map(elem => ({ // map each element in the job array to its own object
      name,
      job: [elem]
    }));
  });
}

console.log(spreadArrObj(arr));

查看 .flatMap 的浏览器兼容性 here .

关于javascript - 使用 lodash 在对象数组中展平数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55119124/

相关文章:

javascript - Jasmine toBeCloseTo 第二个参数是什么?

javascript - 创建可重用的 jQuery 函数

node.js - WebStorm V8 分析 : (Stacktrace cut)?

javascript - Express-Session 不适用于 Express 4.13 吗?

javascript - 如何根据每行的值范围对对象数组进行排序?

javascript - 如何通过比较对象中具有不同元素的两个对象数组来过滤数组?

javascript - 带有接口(interface)的 Typescript 类型定义嵌套命名空间

javascript - 未捕获的类型错误 : Cannot set property 'response' of undefined

javascript - Gulp 任务不访问 karma.conf.js 文件

javascript - 判断号码所属的桶