angular - 如何将多个对象合并为一个并处理 typescript 中的重复键

标签 angular algorithm typescript

我正在使用 ng2-charts,我需要填充水平条形图。 我在 keys.forEach 中获取我的值,我的图表数据的结果 console.log 是(示例):

{ReasonA: 5}
{ReasonA: 5, ReasonB: 5}
{ReasonA: 1, ReasonB: 3, ReasonC: 2}
{ReasonA: 1, ReasonB: 4, ReasonE: 2}

我需要将对象合并为一个,并处理同一个键的多个值。这个例子的期望的结果是这个对象:

{ReasonA: 12, ReasonB: 12, ReasonC: 2, ReasonE: 2}

有了那个对象,我就可以拆分键和值并填充图表。您能否指导我如何将 4 个对象合并成所需的结果

提前致谢。

最佳答案

如果所有属性都是数字,那么使用数组 reduce 的逻辑非常简单。如果属性有不同的类型,那么逻辑会稍微复杂一些。以下是您可以编写的函数示例来实现此目的:

function sumProperties(...objects: { [key: string]: number }[]) {
  return objects.reduce((acc, obj) => {
    for (let key in obj) {
      let a = acc[key] || 0;
      let b = obj[key];
      acc[key] = a + b;
    }

    return acc;
  }, {});
}

使用示例:

sumProperties(
  {ReasonA: 5},
  {ReasonA: 5, ReasonB: 5},
  {ReasonA: 1, ReasonB: 3, ReasonC: 2},
  {ReasonA: 1, ReasonB: 4, ReasonE: 2},
)

关于angular - 如何将多个对象合并为一个并处理 typescript 中的重复键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54350068/

相关文章:

algorithm - n^1.001 的大 O vs n*log n/log 2?

python - 隐藏测试失败,找不到缺陷

javascript - 如何正确使用*ngIf?

angular - 扩展面板标题中的复选框

angular - CodeMirror 作为 Angular2 组件

javascript - Angular ng用于全选和取消选择

Angular 6 - 隐藏或显示从服务触发的组件中的 Div

javascript - 如何在angular4中使用jquery

c - 没有库函数的 C 中的反向字符串函数

angular - "ng generate universal"和 "ng add @nguniversal/express-engine"有什么区别?