我有一个数组如下。
var arr = [
{'ResId':123,'ResVal':4,'Date':'11/03/2015'},
{'ResId':123,'ResVal':8,'Date':'11/03/2015'},
{'ResId':123,'ResVal':4,'Date':'13/03/2015'},
{'ResId':123,'ResVal':4,'Date':'13/03/2015'},
{'ResId':223,'ResVal':4,'Date':'12/03/2015'},
{'ResId':223,'ResVal':2,'Date':'12/03/2015'},
{'ResId':223,'ResVal':4,'Date':'13/03/2015'},
{'ResId':765,'ResVal':4,'Date':'13/03/2015'}]
如果ResId和Date匹配,我想总结ResVal的值。 假设在上面的数组中,ResId = 123和Date = 11/03/2015有两个条目,那么我总结它们并创建一个ResId = 123,Date = 11/03/2015和ResVal = 12的条目
我需要这是动态的,因为所有3个参数的值将始终不同。
My Resulting数组应该如下所示
[{'ResId':123,'ResVal':12,'Date':'11/03/2015'},
{'ResId':123,'ResVal':8,'Date':'13/03/2015'},
{'ResId':223,'ResVal':6,'Date':'12/03/2015'},
{'ResId':223,'ResVal':8,'Date':'13/03/2015'}]
此外,我还需要使用纯JS / Jquery来完成。
答案 0 :(得分:1)
这是包含Array.prototype.reduce()
和Array.prototype.some()
的提案。
var arr = [
{ 'ResId': 123, 'ResVal': 4, 'Date': '11/03/2015' },
{ 'ResId': 123, 'ResVal': 8, 'Date': '11/03/2015' },
{ 'ResId': 123, 'ResVal': 4, 'Date': '13/03/2015' },
{ 'ResId': 123, 'ResVal': 4, 'Date': '13/03/2015' },
{ 'ResId': 223, 'ResVal': 4, 'Date': '12/03/2015' },
{ 'ResId': 223, 'ResVal': 2, 'Date': '12/03/2015' },
{ 'ResId': 223, 'ResVal': 4, 'Date': '13/03/2015' },
{ 'ResId': 765, 'ResVal': 4, 'Date': '13/03/2015' }],
reduced = arr.reduce(function (r, a) {
!r.some(function (b) {
if (a.Date === b.Date && a.ResId === b.ResId) {
b.ResVal += a.ResVal;
return true;
}
}) && r.push({ ResId: a.ResId, ResVal: a.ResVal, Date: a.Date });
return r;
}, []);
document.write('<pre>' + JSON.stringify(reduced, 0, 4) + '</pre>');