首页 > 解决方案 > 如何根据 id 减少对象数组

问题描述

预期输出:

[{id: 1, atributo: {id: 20}, valor: 1753,96},
{id: 2, atributo: {id:21}, valor: 1520}]

我有这个对象数组:

myArr = [{id: 21852, atributo: {id: 20}, valor: "876.98"},
{id: 21853, atributo: {id:21}, valor: "760"},
{id: 21858, atributo: {id:20}, valor: "876.98"},
{id: 21859, atributo: {id:21}, valor: "760"}]

我想在“atributo”中对具有相同 id 的数组进行分组,并对“valor”的值求和。

我尝试了这样的事情:

  const agroup = myArr.reduce(function(a, b) {
    if (a && a.atributo.id === b.atributo.id) {
      return a + Number(b.valor);
    } else {
      return { ...a };
    }
  });

标签: javascript

解决方案


试试这个。您寻找现有的条目,如果找到,您总结valor属性值:

const myArr = [{id: 21852, atributo: {id: 20}, valor: "876.98"},
{id: 21853, atributo: {id:21}, valor: "760"},
{id: 21858, atributo: {id:20}, valor: "876.98"},
{id: 21859, atributo: {id:21}, valor: "760"}];


const res = myArr.reduce((res, curr) => {

  const existing = res.find((e) => e.atributo.id === curr.atributo.id);
  if (existing) {
    existing.valor = +existing.valor + +curr.valor;
  } else {
    res.push(curr);
  }
  
  return res;
}, []);

console.log(res);


推荐阅读