首页 > 解决方案 > 按对象类别查找多个数组的深度嵌套数组数据的总和

问题描述

我有一个函数,它返回包含 2 个数组的 2 个单独的数组。

[Array(3), Array(3)]

[Array(3), Array(3)]

这些嵌套数组每个包含 6 个对象

{value: "10.50", category: "a"}, 
{value: "55.50", category: "a"}
{value: "10.50", category: "b"}, 
{value: "35.50", category: "b"},
{value: "15.50", category: "c"},
{value: "45.50", category: "c"}

我正在尝试遍历每个主要的 2 个数组并按如下类别返回嵌套数组的总和值: 请记住,该值当前是一个字符串。

[
 [
  {value: "66.00", category: "a"},
  {value: "46.00", category: "b"},
  {value: "61.00", category: "c"},
 ]
]

我已经尝试了下面的方法,但我似乎做错了,我查看了许多 SO 线程,我知道有很多类似的线程,但到目前为止没有什么对我有用。TIA。

我可怜的尝试。

  const x = array.forEach((data) => {
    data.reduce(function (
      acc: any[],
      val: { category: string; value: string }
    ) {
      const o = acc
        .filter(function (obj) {
          return obj.category === val.category;
        })
        .pop() || { category: val.category, value: 0 };

      o.value += parseFloat(String(val.value));
      acc.push(o);
      return acc;
    },
    []);
  });

标签: javascriptarrayssum

解决方案


听起来你只需要组合成一个由 索引的对象category,将值相加,确保将字符串强制转换为数字,然后再将其转换回对象数组:

const outerArr = [
  [
    {value: "10.50", category: "a"}, 
    {value: "55.50", category: "a"},
    {value: "10.50", category: "b"}, 
    {value: "35.50", category: "b"},
    {value: "15.50", category: "c"},
    {value: "45.50", category: "c"}
  ],
  // etc
];

const final = outerArr.map((subarr) => {
  const grouped = {};
  for (const { value, category } of subarr) {
    grouped[category] = (grouped[category] || 0) + Number(value);
  }
  return Object.entries(grouped).map(([category, value]) => ({ value: value.toFixed(2), category }));
});
console.log(final);


推荐阅读