来自实际项目需求,数据结构类似
做法是相同 id 的对象合并为一个对象,out 相加。
var arr = [
{ out: 50, id: 1 },
{ out: 50, id: 1 },
{ out: 30, id: 2 },
{ out: 10, id: 1 },
{ out: 40, id: 2 },
{ out: 50, id: 3 }
];
// 期望结果:
[
{ out:110, id:1},
{ out:70, id:2},
{ out:50, id:3},
]
//实现:
function reduce(array, key, value) {
let a = array.concat();
a.sort((c, n) => {
return c[key] - n.[key]
})
var list = []
for (var i = 0; i < a.length; i++) {
var p = a[i - 1],
c = a[i],
n = a[i + 1];
if (n && n[key] === c[key]
&& !p || p[key] !== c[key]) {
var s = a.filter(j => j[key] === c[key]);
for (var j = 1; j < s.length; j++) {
a[i][value] += s[j][value]
};
list.push(a[i])
}
}
return list
}
reduce(arr)
应该是有更好的方法,希望大家分享
打开App,阅读手记