我想处理行数据,如果它的长度超过4个结果,将它的值合并在一起,如何处理它更多的函数式编程方式?
来源:
rows: [{
id: '1',
value: 10
}, {
id: '2',
value: 13
}, {
id: '3',
value: 21
}, {
id: '4',
value: 22
}, {
id: '5',
value: 23
}]
我想使用map,reduce,格式化数据到以下:
// mrege the more result's value together into the "4"
rows: [{
id: '1',
value: 10
}, {
id: '2',
value: 13
}, {
id: '3',
value: 21
}, {
id: '4',
value: 45
}]
答案 0 :(得分:3)
使用一些 ES6功能和 array.prototype.reduce :
var rows = [{ id: '1', value: 10 }, { id: '2', value: 13 }, { id: '3', value: 21 }, { id: '4', value: 22 }, { id: '5', value: 23 }];
var [a, b, c, ...rest] = rows;
var res = [a, b, c, rest.reduce((m, o) => (m.value += o.value, m), { id: rest[0].id, value: 0 })];
console.log(res);
答案 1 :(得分:0)
使用reduce
遍历您的数组。如果index小于4,则只需按下数组,如果大于4则将值添加到最后一个元素:
const rows = [{
id: '1',
value: 10
}, {
id: '2',
value: 13
}, {
id: '3',
value: 21
}, {
id: '4',
value: 22
}, {
id: '5',
value: 23
}];
const result = rows.reduce((acc, elt, index) => {
if (index < 4) {
acc.push(elt);
} else {
acc[3].value += elt.value;
}
return acc;
}, []);
console.log(result);
&#13;
答案 2 :(得分:0)
如果您正在寻找根据需要处理数组的方法,请考虑使用如下所示的原型。
//Assuming that the array elements are added using rows.add()
rows = [];
/*A Prototype that checks the length of array and pushes
item if less that 4 else merges the value of the new data
with the last one*/
rows.add = function(val) {
if(this.length == 4) {
this[this.length-1].value += val.value;
} else {
this.push(val);
}
}
//Adding the elements using add
rows.add( { id : '1', value : 24});
rows.add( { id : '2', value : 21});
rows.add( { id : '3', value : 23});
rows.add( { id : '4', value : 2});
console.log(rows);
rows.add( { id : '5', value : 22});
console.log(rows);
rows.add( { id : '6', value : 22});
console.log(rows);
rows.add( { id : '7', value : 22});
console.log(rows);
&#13;