当前位置: 首页 > 知识库问答 >
问题:

减少和求和对象数组(JS)[重复]

申屠浩歌
2023-03-14

我的数据:

arr: [],
models: [
    { id: 1, name: "samsung", seller_id: 1, count: 56 },
    { id: 1, name: "samsung", seller_id: 2, count: 68 },
    { id: 2, name: "nokia", seller_id: 2, count: 45 },
    { id: 2, name: "nokia", seller_id: 3, count: 49 }
]

预期Arr:

arr: [
    { id: 1, name: "samsung", count: 124 },
    { id: 2, name: "nokia", count: 94 }
]

我的代码是通过删除重复的id来简化模型

this.models.forEach(mdl => {
    if (!this.arr.some(obj => obj.id === mdl.id)) {
        this.arr.push(mdl);
    }
});

但是我不能和counts。
我怎么能做到呢?

共有2个答案

杨慎之
2023-03-14

您可以使用Object.values代替一些。在减少回调中创建一个对象,键为id,值来自模型。然后使用Object.values创建一个值数组

let models = [{
    id: 1,
    name: "samsung",
    seller_id: 1,
    count: 56
  },
  {
    id: 1,
    name: "samsung",
    seller_id: 2,
    count: 68
  },
  {
    id: 2,
    name: "nokia",
    seller_id: 2,
    count: 45
  },
  {
    id: 2,
    name: "nokia",
    seller_id: 3,
    count: 49
  }
]
let data = models.reduce((acc, curr) => {
  if (!acc[curr.id]) {
    acc[curr.id] = curr;
  } else {
    acc[curr.id].count += curr.count

  }
  return acc;
}, {})
console.log(Object.values(data))
柯梓
2023-03-14

您可以使用Array.reduce()

var models = [
    { id: 1, name: "samsung", seller_id: 1, count: 56 },
    { id: 1, name: "samsung", seller_id: 2, count: 68 },
    { id: 2, name: "nokia", seller_id: 2, count: 45 },
    { id: 2, name: "nokia", seller_id: 3, count: 49 }
];

var arr = models.reduce((acc, item) => {
  let existItem = acc.find(({id}) => item.id === id);
  if(existItem) {
    existItem.count += item.count;
  } else {
    acc.push(item);
  }
  return acc;
}, []);

console.log(arr);
 类似资料:
  • 问题内容: 说我想对中的每个元素求和。 我有理由相信,斧头在某些时候是不确定的。 以下工作正常 我在第一个示例中做错了什么? 问题答案: 第一次迭代后,您将返回一个数字,然后尝试获取该数字的属性以将其添加到下一个对象中,该对象是和数学,其中涉及结果。 尝试返回一个对象,该对象包含一个属性,该属性与参数的x个属性之和: 从注释中添加了说明: 每次迭代的返回值在下一次迭代中用作变量。 迭代1: ,,

  • 我有一个对象数组 我需要这样的格式 我的代码是 但它的输出如下所示 请帮忙。谢谢你的时间

  • 我需要求一个对象数组中类似“value”的值之和。 样本输入 预期产量 我试过跟随,但没有达到预期效果

  • 我试图使用Java8 groupby和reduce特性来根据分组对元素求和,但代码似乎不适合我。 我的要求是,对于每一个DTO对象,我希望这个公里数根据卡车车组进行汇总。因此,突出显示的列应该是同一个TruckId(**Contract flotte)的值的总和 这是我的DTO: "'公共类CostsTruckWsDTO实现可序列化{ 以下是逻辑:''costsTruckWsDTO。setGrou

  • 问题内容: 我有一些具有相同值的数组,如下所示。 如果值重复,则将相同的总和相加。对于相同的不同,无需求和。 这就是我想要的。 我陷入上述问题。我已经尽力了。但是我得到了错误的结果。我非常感谢任何建议。 问题答案: @Cloud我已根据您的要求提供了功能,感谢@MI对此总和部分进行了研究。

  • 问题内容: 我正在运行的代码将创建包含多个用户定义类的大对象,然后必须对其进行序列化以供以后使用。据我所知,只有酸洗才能满足我的需求。我一直在使用cPickle来存储它们,但是它生成的对象大约是40G,来自运行在500 mb内存中的代码。序列化的速度不是问题,但是对象的大小是问题。我可以使用任何技巧或替代方法来使泡菜变小吗? 问题答案: 如果您必须使用pickle并且没有其他序列化方法对您有用,那