javascript - 合并具有相同值的对象数组中的对象
问题描述
这是一个包含类别的对象数组以及每个类别所属的解决方案。解决方案是重复的,但类别是唯一的。
const categories = [
{ category: 'Patch Leads', solution: 'Data Solutions' },
{ category: 'Cables', solution: 'Data Solutions' },
{ category: 'Nails', solution: 'Hardware' },
{ category: 'Locks', solution: 'Hardware' },
{ category: 'Screws', solution: 'Hardware' },
{ category: 'Cabinets', solution: 'Cabinet Solutions' },
{ category: 'Swing Frames', solution: 'Cabinet Solutions' },
{ category: 'Racks', solution: 'Cabinet Solutions' },
{ category: 'Fire Cables', solution: 'Fire Solutions' },
];
我需要返回一个新的解决方案对象数组。这是最终结果的格式。当像 id 的索引一样循环时,可以获得这种格式的所有数据都可用,但我就是无法正确获取代码的格式。
const solutions = [
{
id: "0",
name: "Data Solutions",
categories: [
{
id: "0",
name: "Cables",
slug: "cables"
},
{
id: "1",
name: "Patch Leads",
slug: "patch-leads"
}
]
},
{
id: "1",
name: "Hardware",
categories: [
{
id: "0",
name: "Nails",
slug: "nails"
},
{
id: "1",
name: "Locks",
slug: "locks"
},
{
id: "2",
name: "Screws",
slug: "screws"
}
]
},
{
id: "2",
name: "Cabinet Solutions",
categories: [
{
id: "0",
name: "Cabinets",
slug: "cabinets"
},
{
id: "1",
name: "Swing Frames",
slug: "swing-frames"
},
{
id: "2",
name: "Racks",
slug: "racks"
}
]
},
{
id: "3",
name: "Fire Solutions",
categories: [
{
id: "0",
name: "Fire Cables",
slug: "gire-cables"
}
]
}
]
解决方案
您可以使用reduce()方法来做到这一点。迭代时,如果当前项目已经存在,则将当前类别附加到现有项目。如果没有,请创建一个具有当前类别的新项目。
const categories = [ { category: 'Patch Leads', solution: 'Data Solutions' }, { category: 'Cables', solution: 'Data Solutions' }, { category: 'Nails', solution: 'Hardware' }, { category: 'Locks', solution: 'Hardware' }, { category: 'Screws', solution: 'Hardware' }, { category: 'Cabinets', solution: 'Cabinet Solutions' }, { category: 'Swing Frames', solution: 'Cabinet Solutions' }, { category: 'Racks', solution: 'Cabinet Solutions' }, { category: 'Fire Cables', solution: 'Fire Solutions' }, ];
var solutions = categories.reduce((acc, curr) => {
let item = acc.find(item => item.name === curr.solution);
if (item) {
item.categories.push({
"id": item.categories.length,
"name": curr.category,
"slug": curr.category.toLowerCase().replace(' ', '-')
});
} else {
acc.push({
"id": acc.length,
"name": curr.solution,
"categories": [{
"id": 0,
"name": curr.category,
"slug": curr.category.toLowerCase().replace(' ', '-')
}]
});
}
return acc;
}, []);
console.log(solutions);
推荐阅读
- python - How to break the loop in Python?
- performance - 如何让这个谷歌脚本更高效
- python - Python请求不重定向
- postgresql - java.sql.SQLException:无法加载 JDBC 驱动程序类“org.postgresql.Driver”
- python - 从 django 上的网站下载文件
- android - Jetpack Compose 中带有分页库的粘性标头
- python - discord.py 在使用多处理时抛出错误
- flutter - 如何让 Flutter 中的一列中的两个文本相互接触?
- c++ - 无法从 constexpr 函数的返回值初始化 constexpr 值
- javascript - 在 JS 中获取 JSON 节点长度的正确方法?