gpt4 book ai didi

javascript - 合并和分组两个Javascript对象数组和分组

转载 作者:行者123 更新时间:2023-12-03 06:26:28 26 4
gpt4 key购买 nike

我有两个对象数组。一个数组包含项目列表,另一个数组包含类别列表。我想根据categoryIds 创建一个新数组。我尝试使用lodash。但是,无法得到正确的解决方案。

我可以使用循环来做到这一点。但是,我正在寻找更干净的方法。

var items = [
{
id: '001',
name: 'item1',
description: 'description of item1',
categoryId: 'cat1'
},
{
id: '002',
name: 'item2',
description: 'description of item2',
categoryId: 'cat2'
},
{
id: '003',
name: 'item3',
description: 'description of item3',
categoryId: 'cat1'
},
{
id: '004',
name: 'item4',
description: 'description of item4'
}
];

var categories = [
{
id: 'cat1',
name: 'Category1'
},
{
id: 'cat2',
name: 'Category2'
}
];

预期输出

[
{
categoryId: 'cat1',
name: 'Category1',
items: [
{
id: '001',
name: 'item1',
description: 'description of item1',
categoryId: 'cat1'
},
{
id: '003',
name: 'item3',
description: 'description of item3',
categoryId: 'cat1'
}
]
},
{
categoryId: 'cat2',
name: 'Category2',
items: [
{
id: '002',
name: 'item2',
description: 'description of item2',
categoryId: 'cat2'
}
]
},
{
categoryId: '',
name: '',
items: [
{
id: '004',
name: 'item4',
description: 'description of item4'
}
]
}
]

https://jsfiddle.net/sfpd3ppn/

感谢您的帮助

最佳答案

以下方法可以解决问题:

var items = [{ id: '001', name: 'item1', description: 'description of item1', categoryId: 'cat1' },   { id: '002', name: 'item2', description: 'description of item2', categoryId: 'cat2' }, { id: '003', name: 'item3', description: 'description of item3', categoryId: 'cat1' }, { id: '004', name: 'item4', description: 'description of item4' } ];

var categories = [ { id: 'cat1', name: 'Category1' }, { id: 'cat2', name: 'Category2' } ];

var output = categories.concat([{id:'',name:''}]).map(function(v) {
return {
categoryId: v.id,
name: v.name,
items: items.filter(function(o) {
return o.categoryId === v.id || !o.categoryId && !v.id;
})
};
});

console.log(output);

我首先使用 .concat() 创建一个新的类别数组,其中包含原始的 categories 项以及一个“空”类别。然后我 .map() 该数组返回具有所需输出结构的类别对象,每个对象都有一个由 .filter() 生成的 items 数组原始items数组。

(请注意,output 中的 items 数组包含对原始 items 输入中相同对象的引用,不是它们的副本。如果您想要副本,可以在 .filter() 之后添加另一个 .map()。)

关于javascript - 合并和分组两个Javascript对象数组和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38627089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com