我想合并此数据集中的所有@blur
对象:
article
如果const data = [
{
category: {
id: 1,
},
article: {
title: 'aaa',
},
},
{
category: {
id: 1,
},
article: {
title: 'bbb',
},
},
{
category: {
id: 2,
},
article: {
title: 'ccc',
},
},
{
category: {
id: 3,
},
article: {
title: 'ddd',
},
},
{
category: {
id: 3,
},
article: {
title: 'eee',
},
},
]
匹配,则在相同的category
下。像这样:
category.id
有什么想法吗?很高兴使用Lodash。谢谢!
答案 0 :(得分:1)
您可以使用reduce
功能。在reduce回调函数内部,使用findIndex
检查累加器数组是否有一个对象,其中id
与正在迭代的当前对象的ID相同。如果相同,则更新articles数组,否则使用所需的键创建一个新对象并将其推送到累加器数组
const data = [{
category: {
id: 1,
},
article: {
title: 'aaa',
},
},
{
category: {
id: 1,
},
article: {
title: 'bbb',
},
},
{
category: {
id: 2,
},
article: {
title: 'ccc',
},
},
{
category: {
id: 3,
},
article: {
title: 'ddd',
},
},
{
category: {
id: 3,
},
article: {
title: 'eee',
},
}
]
let newData = data.reduce(function(acc, curr) {
let findIdIndex = acc.findIndex(function(item) {
return item.category.id === curr.category.id
});
if (findIdIndex === -1) {
acc.push({
category: {
id: curr['category']['id']
},
articles: [{
title: curr.article.title
}]
})
} else {
acc[findIdIndex].articles.push({
title: curr.article.title
})
}
return acc;
}, []);
console.log(newData)