JS | Reduce

reduce() 方法对数组中的每个元素执行一个自定义的reduce方法(升序执行),将其结果汇总为单个返回值。

语法

arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

callback:执行数组中每个值 (如果没有提供 initialValue则第一个值除外)的函数,包含四个参数

accumulator: 累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue。
currentValue: 数组中正在处理的元素
index(可选): 数组中正在处理的当前元素的索引。 如果提供了initialValue,则起始索引号为0,否则从索引1起始
array(可选): 调用reduce()的数组

initialValue(可选): 作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。

练习

对数组的所有值累加

var sum = [0,1,2,3,4].reduce((acc,cur)=>acc+cur,0); 
console.log(sum)
//=>10

把二维数组铺平

var arr = [[4,5],[7,8],[78,56]];
var flatArr = arr.reduce((acc,cur) => acc.concat(cur),[])
console.log(flatArr);
//=>[4, 5, 7, 8, 78, 56]

统计数组中相同数值的次数

var nums = ['7','8','4','6','7','8','4','6','9','7','8','9','2','4','7']
var countNum = nums.reduce((acc,cur) => {
  cur in acc ? acc[cur]++ : acc[cur]=1;
  return acc;
},{})
console.log(countNum);
//=>{2: 1, 4: 3, 6: 2, 7: 4, 8: 3, 9: 2}

对数组的所有对象的值累加

var sum= [{x:1},{x:2},{x:3},{x:4}].reduce((acc,cur) => acc + cur.x,0);
console.log(sum)
//=>10

操作Object,将学生按所属班级分类

var students = [
  {name: 'Tom' , class : 1},
  {name: 'Gogo' , class : 2},
  {name: 'Jany' , class : 1},
  {name: 'Jim' , class : 2},
  {name: 'Nier' , class: 2}
]
var groupByClass = students.reduce((groupByClass,student)=>{
    var classId = student.class;
    groupByClass[classId] ? '' :groupByClass[classId] = [];
    groupByClass[classId].push(student);
    return groupByClass;
},{})
console.log(groupByClass);
//=>{"1":[{"name":"Tom","class":1},{"name":"Jany","class":1}],"2":[{"name":"Gogo","class":2},{"name":"Jim","class":2},{"name":"Nier","class":2}]}
原文地址:https://www.cnblogs.com/jj81/p/13680893.html