我有两个数组:一个包含类别,第二个包含项目。
我想使用 lodash 将所有项目合并到正确的类别数组中。不过,我确实有一个问题。既然这可以通过双 foreach 循环来完成,那么有什么理由使用 lodash 吗?
数组 1(类别):
"categories": [
{
"id": 1,
"name": "cat_1",
"items": []
},
{
"id": 11,
"name": "cat_2",
"items": []
},
{
"id": 61,
"name": "cat_3",
"items": []
}
]
数组 2(包含项目):
[
{
id: 15,
name: 'some_item',
category_id: 1,
category_name: 'cat_1',
},
{
id: 112,
name: 'some_item',
category_id: 11,
category_name: 'cat_2',
},
{
id: 235,
name: 'some_item',
category_id: 11,
category_name: 'cat_2',
},
]
所需的对象看起来是:
"categories":
[
{
"id": 1,
"name": "cat_1",
"items": [
{
id: 15,
name: 'some_item',
category_id: 1,
category_name: 'cat_1',
}
]
},
{
"id": 11,
"name": "cat_2",
"items": [
{
id: 112,
name: 'some_item',
category_id: 11,
category_name: 'cat_2',
},
{
id: 235,
name: 'some_item',
category_id: 11,
category_name: 'cat_2',
}
]
},
{
"id": 61,
"name": "cat_3",
"items": []
}
]
最佳答案
这就是使用普通 ES5 的方式:
const categories = [{id:1,name:"cat_1",items:[]},{id:11,name:"cat_2",items:[]},{id:61,name:"cat_3",items:[]}]
const items = [{id:15,name:"some_item",category_id:1,category_name:"cat_1"},{id:112,name:"some_item",category_id:11,category_name:"cat_2"},{id:235,name:"some_item",category_id:11,category_name:"cat_2"}];
const result =
categories.map(c => ({ ...c, items: items.filter(i => i.category_id === c.id) }));
console.log(result);
Javascript 是一种非常特殊的语言,因为它的历史。它最初是一种非常简陋的语言,几乎没有什么功能,尽管它已经发展,但并非所有浏览器都支持它的所有功能。
这导致了 lodash、underscore、inmutable.js 和 jquery 等库的出现,它们填补了 Javascript 标准库的空白。
正如你所见,现在 JS 有了非常方便的抽象,例如 each
、map
、find
、filter
和reduce
,这是跨语言的普遍理解的概念。这使得代码比使用 for
循环编写低级过程代码更容易理解。
作为一个颜色注释,我开始使用 ruby 进行编程,它以 standard library rich in collection abstractions 而闻名。 。因此,直到最近我才注意到语言中的 for
循环,即使它们是实现更高级别抽象所必需的。
关于javascript - 根据属性合并两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46834489/