【问题标题】:Javascript array of Objects merging and removing duplicates while summing same ID's [duplicate]对象的 Javascript 数组合并和删除重复项,同时汇总相同的 ID [重复]
【发布时间】:2020-07-28 03:00:25
【问题描述】:

我想减少一个数组,其中具有相同 id 的项目对其属性之一求和。

数组看起来像这样

array = [
{
  id: 123,
  qty: 10,
  unit: 'dollar'
},
{
  id: 456,
  qty: 15,
  unit: 'euro'
},
{
  id: 123,
  qty: 20,
  unit: 'dollar'
}]

结果是一个看起来像这样的数组

array = [
{
  id: 123,
  qty: 30,
  unit: 'dollar'
},
{
  id: 456,
  qty: 15,
  unit: 'euro'
}]

我一直在尝试使用 reduce 来做到这一点,但无济于事。

【问题讨论】:

  • Array .filter() 方法。查看 mdn 文档developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • @MFK34,过滤器是错误的工具。
  • @trincot,为什么使用过滤器会出错?
  • @MFK34,因为您需要来自所有对象的信息。
  • @tincot,哦,好的,你能给我举个例子,说明 .filter 最好在哪里使用或推荐在哪里使用。我只是想了解为什么与为什么不过滤。如果您有任何文档/链接来解释使用各种数组方法的推荐方法。谢谢

标签: javascript arrays object reduce


【解决方案1】:

这是使用 for 循环和数组的 .find 方法的简单方法。

var array = [
{
  id: 123,
  qty: 10,
  unit: 'dollar'
},
{
  id: 456,
  qty: 15,
  unit: 'euro'
},
{
  id: 123,
  qty: 20,
  unit: 'dollar'
}];

var res = [];
for(let i=0;i<array.length;i++){
  let tempObj = res.find(obj => obj.id===array[i].id);
  if(tempObj){
    tempObj.qty+=array[i].qty;
  } else {
    res.push(array[i]);
  }
}

console.log(res);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 2022-08-23
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多