javascript - 基于对象数组中的条件的俱乐部对象
问题描述
我有一个这样的对象数组
const obj = [
{
id: 1,
name: "Abc"
},
{
id: 2,
name: "BED"
},
{
id: 1,
name: "FGH"
},
{
id: 3,
name: "RFS"
},
{
id: 1,
name: "Abc"
},
{
id: 2,
name: "BGH"
}
]
我想将具有相同 id 和相同名称的对象组合在一起,以便我的最终输出看起来像这样-
const result = [
[
{
id: 1,
name: "Abc"
},
{
id: 1,
name: "Abc"
}
],
[
{
id: 1,
name: "TSD"
}
],
[
{
id: 2,
name: "BED"
}
],
[
{
id: 2,
name: "BGH"
}
],
[
{
id: 3,
name: "RFS"
}
]
]
注意 - 我在数组中有大约 300-400 个对象,我使用嵌套的 For 循环来解决这个问题。因此,我正在寻找更好更快的解决方案
解决方案
您可以使用reduce()
和使用对象累加器。最后用于Object.values
获取数组。
const obj = [ { id: 1, name: "Abc" }, { id: 2, name: "BED" }, { id: 1, name: "FGH" }, { id: 3, name: "RFS" }, { id: 1, name: "TSD" }, { id: 2, name: "BGH" } ]
let res = Object.values(obj.reduce((ac,a) => {
if(!ac[a.id]) ac[a.id] = [];
ac[a.id].push(a);
return ac;
},{}))
console.log(res)
使用for...of
const obj = [ { id: 1, name: "Abc" }, { id: 2, name: "BED" }, { id: 1, name: "FGH" }, { id: 3, name: "RFS" }, { id: 1, name: "TSD" }, { id: 2, name: "BGH" } ]
let res = {};
for(let item of obj){
if(!res[item.id]) res[item.id] = [];
res[item.id].push(item);
}
console.log(Object.values(res))
推荐阅读
- visual-studio-code - 为什么 vscode 找不到`preLaunchTask`?
- javascript - Discord.js 无法向该用户发送消息
- reactjs - 如何在 React 应用程序中添加白板?
- sql-server - 多数据库搜索和更新
- mysql - 如何从同一列sql中分离日期和时间
- c++ - 为什么函数名称不能与返回名称类型相同?
- javascript - 有人可以像我五岁那样解释如何计算字符串中有多少个字母而不重复吗?
- flutter - 如何证明颤动列小部件中的文本?
- apache-kafka - Kafka - 集群范围是什么意思
- php - 如何从 JSON 数据中绘制谷歌折线图