【问题标题】:How to get count of duplicate objects in Array [duplicate]如何获取数组中重复对象的数量[重复]
【发布时间】:2021-07-20 16:19:12
【问题描述】:

这是一个对象数组,我想获取数组中重复对象的计数。 找出重复对象最简洁有效的方法是什么?

[
{
  partNum: 'ACDC1007',
  brandName: 'Electric',
  supplierName: 'Electric',
},
{
  partNum: 'ACDC1007',
  brandName: 'Electric',
  supplierName: 'Electric',
},
{
  partNum: 'ACDC1007',
  brandName: 'Electric',
  supplierName: 'Electric',
},
{
  partNum: 'ACDC1009',
  brandName: 'Electric',
  supplierName: 'Electric',
},

{
  partNum: 'ACDC1000',
  brandName: 'Electric',
  supplierName: 'Electric',
}

]

我正在寻找一种方法来修改基于 partNum 的对象数组,如下所示:

[
{
  partNum: 'ACDC1007',
  brandName: 'Electric',
  supplierName: 'Electric',
  count: 3
},
{
  partNum: 'ACDC1007',
  brandName: 'Electric',
  supplierName: 'Electric',
  count: 3
},
{
  partNum: 'ACDC1007',
  brandName: 'Electric',
  supplierName: 'Electric',
  count: 3
},
{
  partNum: 'ACDC1000',
  brandName: 'Electric',
  supplierName: 'Electric',
  count: 1
}
.............

] ```

Thanks

【问题讨论】:

标签: javascript node.js reactjs angular typescript


【解决方案1】:

您可以使用reducemap 轻松实现此目的。首先统计所有对象的所有出现次数,然后动态添加属性。

const arr = [
  {
    partNum: "ACDC1007",
    brandName: "Electric",
    supplierName: "Electric",
  },
  {
    partNum: "ACDC1007",
    brandName: "Electric",
    supplierName: "Electric",
  },
  {
    partNum: "ACDC1007",
    brandName: "Electric",
    supplierName: "Electric",
  },
  {
    partNum: "ACDC1009",
    brandName: "Electric",
    supplierName: "Electric",
  },

  {
    partNum: "ACDC1000",
    brandName: "Electric",
    supplierName: "Electric",
  },
];

const countDict = arr.reduce((acc, curr) => {
  const { partNum } = curr;
  if (acc[partNum]) ++acc[partNum];
  else acc[partNum] = 1;
  return acc;
}, {});

const result = arr.map((obj) => {
  obj["count"] = countDict[obj.partNum];
  return obj;
});

console.log(result);

【讨论】:

  • 取决于你如何处理。我的意思是你要在这个数组中改变什么?请详细说明
  • 我能达到同样的结果吗?如果我将数组更改为此。 ? const arr = [ { produsts : { partNum: "ACDC1007", brandName: "Electric", supplierName: "Electric", }, }, { produsts : { partNum: "ACDC1007", brandName: "Electric", supplierName: "Electric ", }, }, { produsts : { partNum: "ACDC1007", brandName: "Electric", supplierName: "Electric", }, } ]
  • 它不适用于嵌套对象。它仅适用于没有嵌套对象并且只要对象包含属性partNum
  • 我已经改变了逻辑,它对我来说工作正常。 const countDict = arr.reduce((acc, curr) => { const { partNum } = curr.products; if (acc[partNum]) ++acc[partNum]; else acc[partNum] = 1; return acc; } , {}); const 结果 = arr.map((obj) => { obj.products["isMatched"] = countDict[obj.products.partNum]; return obj; });
猜你喜欢
  • 2022-01-21
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 2013-04-09
相关资源
最近更新 更多