javascript - 根据对象数组中的条件组合对象

标签 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))

关于javascript - 根据对象数组中的条件组合对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55728553/

相关文章:

javascript - tableToExcel jQuery 在 IE 中抛出奇怪的错误

javascript - jQuery 选择器选择每个字母的第一个元素

javascript - 我如何在我的网页外部创建一个链接,目的是在 anchor 中打开我的网页,然后加载 iframe?

javascript - 如何隐藏从其他(复杂)3D 对象背面伸出的 3D 对象部分?

javascript - ant进程中回显文件名

javascript - 小数计数器 React + JS

javascript - 使用 jQuery ajax 时在一个 div 中显示所有 laravel 验证错误

javascript - 从 jquery 范围调用到类函数

javascript - 排除未定义的值

javascript - setInterval问题(js)