首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组中的重复对象合并并对值进行求和

将数组中的重复对象合并并对值进行求和
EN

Stack Overflow用户
提问于 2022-08-25 19:57:22
回答 3查看 47关注 0票数 0

我有一个对象数组

代码语言:javascript
复制
    [
      {
        "team": "team-a",
        "results": {
          "passed": 1,
          "failed": 1,
          "flaky": 1,
          "skipped": 1,
          "timedOut": 1
        }
      },
      {
        "team": "team-b",
        "results": {
          "passed": 1,
          "failed": 1,
          "flaky": 1,
          "skipped": 1,
          "timedOut": 1
        }
      },
      {
        "team": "team-a",
        "results": {
          "passed": 1,
          "failed": 1,
          "flaky": 1,
          "skipped": 1,
          "timedOut": 1
        }
      },
      {
        "team": "team-b",
        "results": {
          "passed": 1,
          "failed": 1,
          "flaky": 1,
          "skipped": 1,
          "timedOut": 1
        }
      },
      {
        "team": "team-unassigned",
        "results": {
          "passed": 1,
          "failed": 1,
          "flaky": 1,
          "skipped": 1,
          "timedOut": 1
        }
      }
    ]

我正在寻找一种将对象与重复的team键合并的方法,然后将结果对象中的每个值和起来。最终结果将如下所示:

代码语言:javascript
复制
[
  {
    "team": "team-a",
    "results": {
      "passed": 2,
      "failed": 2,
      "flaky": 2,
      "skipped": 2,
      "timedOut": 2
    }
  },
  {
    "team": "team-b",
    "results": {
      "passed": 2,
      "failed": 2,
      "flaky": 2,
      "skipped": 2,
      "timedOut": 2
    }
  },
  {
    "team": "team-unassigned",
    "results": {
      "passed": 1,
      "failed": 1,
      "flaky": 1,
      "skipped": 1,
      "timedOut": 1
    }
  }
]

我试过减少,但就是无法找到解决办法。有人能给我指点吗?

EN

回答 3

Stack Overflow用户

发布于 2022-08-25 20:10:18

请记住它修改了source数组。

代码语言:javascript
复制
const source = [{
    "team": "team-a",
    "results": {
      "passed": 1,
      "failed": 1,
      "flaky": 1,
      "skipped": 1,
      "timedOut": 1
    }
  },
  {
    "team": "team-b",
    "results": {
      "passed": 1,
      "failed": 1,
      "flaky": 1,
      "skipped": 1,
      "timedOut": 1
    }
  },
  {
    "team": "team-a",
    "results": {
      "passed": 1,
      "failed": 1,
      "flaky": 1,
      "skipped": 1,
      "timedOut": 1
    }
  },
  {
    "team": "team-b",
    "results": {
      "passed": 1,
      "failed": 1,
      "flaky": 1,
      "skipped": 1,
      "timedOut": 1
    }
  },
  {
    "team": "team-unassigned",
    "results": {
      "passed": 1,
      "failed": 1,
      "flaky": 1,
      "skipped": 1,
      "timedOut": 1
    }
  }
]
const additional = [{
    "team": "team-a",
    "results": {
      "passed": 2,
      "failed": 2,
      "flaky": 2,
      "skipped": 2,
      "timedOut": 2
    }
  },
  {
    "team": "team-b",
    "results": {
      "passed": 2,
      "failed": 2,
      "flaky": 2,
      "skipped": 2,
      "timedOut": 2
    }
  },
  {
    "team": "team-unassigned",
    "results": {
      "passed": 1,
      "failed": 1,
      "flaky": 1,
      "skipped": 1,
      "timedOut": 1
    }
  }
]

source.forEach(({
  team,
  results
}) => {
  const {
    results: additionalResults
  } = additional.find(o => o.team === team)
  Object.entries(additionalResults).forEach(([key, value]) => {
    results[key] += value
  })
})

console.log(source)

票数 0
EN

Stack Overflow用户

发布于 2022-08-25 20:21:52

是,

代码语言:javascript
复制
var arr=[{team:"team-a",results:{passed:1,failed:1,flaky:1,skipped:1,timedOut:1}},{team:"team-b",results:{passed:1,failed:1,flaky:1,skipped:1,timedOut:1}},{team:"team-a",results:{passed:1,failed:1,flaky:1,skipped:1,timedOut:1}},{team:"team-b",results:{passed:1,failed:1,flaky:1,skipped:1,timedOut:1}},{team:"team-unassigned",results:{passed:1,failed:1,flaky:1,skipped:1,timedOut:1}}]

var result = Object.values(arr.reduce(function(agg, item) {
  agg[item.team] = agg[item.team] || {
    team: item.team,
    results: {}
  };
  for (var key in item.results) {
    agg[item.team].results[key] = (agg[item.team].results[key] || 0) + item.results[key]
  }
  return agg;
}, {}))

console.log(result);
代码语言:javascript
复制
.as-console-wrapper {
  max-height: 100% !important;
}

票数 0
EN

Stack Overflow用户

发布于 2022-08-25 21:03:18

代码语言:javascript
复制
let input = [
      {
        "team": "team-a",
        "results": {
          "passed": 1,
          "failed": 1,
          "flaky": 1,
          "skipped": 1,
          "timedOut": 1
        }
      },
      {
        "team": "team-b",
        "results": {
          "passed": 1,
          "failed": 1,
          "flaky": 1,
          "skipped": 1,
          "timedOut": 1
        }
      },
      {
        "team": "team-a",
        "results": {
          "passed": 1,
          "failed": 1,
          "flaky": 1,
          "skipped": 1,
          "timedOut": 1
        }
      },
      {
        "team": "team-b",
        "results": {
          "passed": 1,
          "failed": 1,
          "flaky": 1,
          "skipped": 1,
          "timedOut": 1
        }
      },
      {
        "team": "team-unassigned",
        "results": {
          "passed": 1,
          "failed": 1,
          "flaky": 1,
          "skipped": 1,
          "timedOut": 1
        }
      }
    ];

let resultObj = {};
input.forEach((entry) => {
    let resultTypes = Object.keys(entry.results);
    resultTypes.map((type) => {
        resultObj[entry.team] = resultObj[entry.team] || {
            "team" : entry.team,
            "results" : {}
        };
        resultObj[entry.team].results[type] =  (resultObj[entry.team].results[type] || 0) + entry.results[type];  
    });
});
console.log( Object.values(resultObj) );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73493093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档