我有一个对象,它基本上包含三个重要参数,用于总计算。 例如我的对象如下:
[
{'Id':1,'ResourceId':1,'StartDate':'01-01-2017','Hours':8,'TotalHrs':8},
{'Id':2,'ResourceId':1,'StartDate':'01-01-2017','Hours':4,'TotalHrs':4},
{'Id':3,'ResourceId':1,'StartDate':'01-03-2017','Hours':4,'TotalHrs':4},
{'Id':4,'ResourceId':1,'StartDate':'01-03-2017','Hours':4,'TotalHrs':4},
{'Id':5,'ResourceId':2,'StartDate':'01-01-2017','Hours':2,'TotalHrs':2},
{'Id':6,'ResourceId':2,'StartDate':'01-01-2017','Hours':4,'TotalHrs':4},
{'Id':7,'ResourceId':2,'StartDate':'01-03-2017','Hours':2,'TotalHrs':2},
]
因此,目前 TotalHrs 参数与 Hours 参数具有相同的值。
我希望它是特定 ResourceId 和 Startdate 的总计。 即,如果在数组中,如果 ResourceId 和 Startdate 与 TotalHrs 参数匹配,则应为 Hours 参数值的总和。
最终的数组就变成了。
[
{'Id':1,'ResourceId':1,'StartDate':'01-01-2017','Hours':8,'TotalHrs':12},
{'Id':2,'ResourceId':1,'StartDate':'01-01-2017','Hours':4,'TotalHrs':12},
{'Id':3,'ResourceId':1,'StartDate':'01-03-2017','Hours':4,'TotalHrs':8},
{'Id':4,'ResourceId':1,'StartDate':'01-03-2017','Hours':4,'TotalHrs':8},
{'Id':5,'ResourceId':2,'StartDate':'01-01-2017','Hours':2,'TotalHrs':6},
{'Id':6,'ResourceId':2,'StartDate':'01-01-2017','Hours':4,'TotalHrs':6},
{'Id':7,'ResourceId':2,'StartDate':'01-03-2017','Hours':2,'TotalHrs':2},
]
因此,在上面的示例中,ResourceId
: 1 和 StartDate
: 01-01-2017 出现两次,Hours 值分别为 8 和 4,因此 TotalHrs 变为 8 +4=12。
此外,我不想分组,我希望结果数组中的元素数量相同,但 TotalHrs
的值更新。
最佳答案
使用 Array.prototype.reduce() 的简短解决方案和 Array.prototype.forEach()功能:
var data = [ {'Id':1,'ResourceId':1,'StartDate':'01-01-2017','Hours':8,'TotalHrs':8}, {'Id':2,'ResourceId':1,'StartDate':'01-01-2017','Hours':4,'TotalHrs':4}, {'Id':3,'ResourceId':1,'StartDate':'01-03-2017','Hours':4,'TotalHrs':4}, {'Id':4,'ResourceId':1,'StartDate':'01-03-2017','Hours':4,'TotalHrs':4}, {'Id':5,'ResourceId':2,'StartDate':'01-01-2017','Hours':2,'TotalHrs':2}, {'Id':6,'ResourceId':2,'StartDate':'01-01-2017','Hours':4,'TotalHrs':4}, {'Id':7,'ResourceId':2,'StartDate':'01-03-2017','Hours':2,'TotalHrs':2} ];
data.forEach(function (o) {
o.TotalHrs = this[o.ResourceId + o.StartDate];
}, data.reduce(function (r, o) {
var k = o.ResourceId + o.StartDate;
(!r[k])? r[k] = o.TotalHrs : r[k] += o.TotalHrs;
return r;
}, {}));
console.log(data);
var k = o.ResourceId + o.StartDate;
-k
这是一个哈希键字符串,用于对具有相同 ResourceId
的条目进行分组和StartDate
属性
关于javascript - 根据数组计算对象的求和值并更新为总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42366106/