zoukankan      html  css  js  c++  java
  • 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}]}
    
  • 相关阅读:
    闭包
    内置函数
    595926265989859
    C错题集锦
    C中改变指针的指向
    /dev/zero
    define的高级用法
    (转)Linux ./configure --prefix命令
    (转)linux下tty,控制台,虚拟终端,串口,console(控制台终端)详解
    内核驱动模块的Makefile模板
  • 原文地址:https://www.cnblogs.com/jj81/p/13680893.html
Copyright © 2011-2022 走看看