在具有相同键的对象数组中插入键的值



假设我有一个对象数组:

const Info = [{
"id": "1aa2",
"details": [{
"name": "rusty",
"age": "12",
"favourite": [ObjectId("602b696cb783fc15845d015e"), ObjectId("602b696cb783fc15845d0112")]
}]
},
{
"id": "3aa2",
"details": [{
"name": "john",
"age": "122",
"favourite": [ObjectId("602b696cb783fc15845d0112s"), ObjectId("602b696cb783fc15845d01wqs")]
}]
}
]

我想在一个数组中合并favorite:

["favourite": [
ObjectId("602b696cb783fc15845d015e"), 
ObjectId("602b696cb783fc15845d0112"), 
ObjectId("602b696cb783fc15845d0112s"), 
ObjectId("602b696cb783fc15845d01wqs")
]
]

我尝试使用for循环,但它创建了讨厌的嵌套for循环,这大大降低了性能。

基本上,您需要遍历Info集合,遍历'details'子集合,并将所有数据复制到新数组中。之后,只需使用favs变量内容创建一个新的结构,或者直接将此代码粘贴为对象值。

顺便说一句,你的结果数组至少需要包含一个对象,像这样:

[ { favourite: [...] } ]

关于嵌套结构,您应该尝试https://lodash.com/docs/4.17.15#flatMapDeep(至少只是检查代码)

const Info = [{
"id": "1aa2",
"details": [{
"name": "rusty",
"age": "12",
"favourite": ['ObjectId("602b696cb783fc15845d015e")', 'ObjectId("602b696cb783fc15845d0112")']
}]
},
{
"id": "3aa2",
"details": [{
"name": "john",
"age": "122",
"favourite": ['ObjectId("602b696cb783fc15845d0112s")', 'ObjectId("602b696cb783fc15845d01wqs")']
}]
}
]
const favs = Info.reduce((acc, item) => {
item.details.forEach(detail => {
acc.push(...detail.favourite);
})
return acc;
}, []);
console.log(favs);

最新更新