首页 > 解决方案 > 从对象中的每个项目中获取总计

问题描述

我们如何映射和对象并添加某些值然后获取总数,我想映射下面的对象,然后映射对象中的项目。有人有想法吗?

目的:

  [
    {
        "description": "Current Term",
        "monthlyRent": 29971.599999999995,
        "monthsInPeriod": 41.7,
        "rentInPeriod": null
    },
    {
        "description": "Current Term - Rent Adjustment",
        "monthlyRent": 31470.180000000004,
        "monthsInPeriod": 47.96666666666667,
        "rentInPeriod": 1509519.634
    }
]
29971.599999999995 + 41.7   = 30,012
31470.180000000004 + 47.96666666666667 =  31,517

结果:应该是

 total = 30,012 + 31,517

标签: angulartypescript

解决方案


map()方法创建一个新数组,其中填充了对调用数组中的每个元素调用提供的函数的结果。请参阅此处的示例

reduce()方法对数组的每个元素执行用户提供的“reducer”回调函数,传入前一个元素的计算返回值。在数组的所有元素上运行 reducer 的最终结果是单个值。请参阅此处的示例

通过结合两者,您可以提出如下解决方案:

let arry = [
    {
        "description": "Current Term",
        "monthlyRent": 29971.599999999995,
        "monthsInPeriod": 41.7,
        "rentInPeriod": null
    },
    {
        "description": "Current Term - Rent Adjustment",
        "monthlyRent": 31470.180000000004,
        "monthsInPeriod": 47.96666666666667,
        "rentInPeriod": 1509519.634
    }
];

let total = arry 
  .map(obj=> obj.monthlyRent + obj.monthsInPeriod)
  .reduce((value, previousValue) => previousValue + value);

另一种解决方案是对每个使用简单:

 let total2:number=0;
    for (let i = 0; i < this.arry.length; i++) {
       let val = this.arry[i].monthlyRent + this.arry[i].monthsInPeriod;
       total2 = total2+val       
    }

请在此处找到附加的StackBlitz


推荐阅读