数组内字段相同的求和后放到新数组的一个对象

请教一下,javascript 中数组的内容怎么样可以变成求和后放在不同的对象里。如图,谢谢!

img

分割数据,再用map重组

function parseAndSum(data) {
      const productMap = new Map();

      // 解析数据并计算相同产品的数量
      data.forEach(item => {
        const items = item.split(",");
        for (let i = 0; i < items.length; i += 2) {
          const product = items[i];
          const quantity = parseInt(items[i + 1]);
          if (!productMap.has(product)) {
            productMap.set(product, 0);
          }
          productMap.set(product, productMap.get(product) + quantity);
        }
      });

      // 构建最终的结果数组
      const result = Array.from(productMap, ([product, totalQuantity]) => ({ [product]: totalQuantity }));
      return result;
    }

map+split

onst input = ["a,1", "b,2"];

const output = input.map(item => {
  const [key, value] = item.split(",");
  return { [key]: Number(value) };
});

console.log(output);

【以下回答由 GPT 生成】

优化后的问题标题: JavaScript中如何将数组内相同字段的值求和并放入新的对象中? 优化后的问题内容: 我想在JavaScript中实现将数组中相同字段的值求和,并将结果放入新的对象中。我希望能够清楚地了解如何解决这个问题,请提供相关的代码或解释。谢谢!

问题标签: javascript

回答:

这个问题可以通过使用JavaScript的reduce()方法和对象的方便性来解决。

首先,我们需要一个数组,其中包含我们想要求和的对象,以及一个用来分组的字段。以下是一个示例数组:

const arr = [
  { name: 'A', value: 1 },
  { name: 'B', value: 2 },
  { name: 'A', value: 3 },
  { name: 'C', value: 4 },
  { name: 'B', value: 5 }
];

我们可以使用reduce()方法来遍历数组并将相同字段的值求和。这是一个示例代码:

const result = arr.reduce((acc, obj) => {
  const key = obj.name;
  if (!acc[key]) {
    acc[key] = { name: key, sum: obj.value };
  } else {
    acc[key].sum += obj.value;
  }
  return acc;
}, {});

在上述代码中,我们使用了一个累加器(acc)和一个对象{}作为reduce()方法的初始值。在每次迭代中,我们检查累加器中是否已经有一个具有相同名称的对象。如果没有,则创建一个新对象并将其值初始化为当前元素的值。如果已经存在相同名称的对象,则将其值进行累加。

通过这个代码,我们得到一个包含求和结果的新对象。在上述示例中,结果将是以下对象:

{
  A: { name: 'A', sum: 4 },
  B: { name: 'B', sum: 7 },
  C: { name: 'C', sum: 4 }
}

希望以上代码和解释对您有所帮助!如果还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^