更多功能编程方式来处理数据 - javascript es6

时间:2017-12-22 07:36:57

标签: javascript ecmascript-6 functional-programming

我想处理行数据,如果它的长度超过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
}]

3 个答案:

答案 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;
&#13;
&#13;

答案 2 :(得分:0)

如果您正在寻找根据需要处理数组的方法,请考虑使用如下所示的原型。

&#13;
&#13;
//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;
&#13;
&#13;