• 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}]}
    
  • 相关阅读:
    SpringBoot集成Shiro 实现动态加载权限
    docker 常用命令 以及常见问题
    sql小知识点
    下载文件时-修改文件名字
    关于.net导出数据到excel/word【占位符替换】
    常见js报错
    .net core api +swagger(一个简单的入门demo 使用codefirst+mysql)
    .net core +codefirst(.net core 基础入门,适合这方面的小白阅读,本文使用mysql或mssql)
    基础测试jmeter5.0+badboy(从小白到入门)
    关于ef+codefirst+mysql/dapper(dbFirse)(入门)
  • 原文地址:https://www.cnblogs.com/jj81/p/13680893.html
Copyright © 2020-2023  润新知