我有一个这样的数组
[
{
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/