• Reduce用法


    reduce()方法对数组中的每一个元素执行一个reducer函数(由你提供),从而得到一个单一的输出值。

    reduce() 方法将一个数组中的所有元素还原成一个单一的输出值,输出值可以是数字、对象或字符串。 reduce() 方法有两个参数,第一个是回调函数,第二个是初始值

    回调函数

    回调函数在数组的每个元素上执行。回调函数的返回值是累加结果,并作为下一次调用回调函数的参数提供。回调函数带有四个参数。

    • Accumulator(累加器)——累加器累加回调函数的返回值。
    • Current Value(当前值)——处理数组的当前元素。
    • Current Index(当前索引)——处理数组当前元素的索引。
    • Source Array(源数组)

    Current IndexSource Array是可选的。

    初始值

    如果指定了初始值,则将累加器设置为 initialValue 作为初始元素。否则,将累加器设置为数组的第一个元素作为初始元素。

    const numbersArr = [67, 90, 100, 37, 60];
    
    const total = numbersArr.reduce(function(accumulator, currentValue){
        return accumulator + currentValue;
    }, 0);
    
    console.log("total : "+ total);
    

    Reduce用例:

    1、对数组的所有值求和
    const studentResult = [67, 90, 100, 37, 60];
    
    const total = studentResult.reduce((accumulator, currentValue) => accumulator +currentValue, 0);
    
    console.log(total); // 354
    
    2、对象数组中的数值之和
    const studentResult = [
      { subject: '数学', marks: 78 },
      { subject: '物理', marks: 80 },
      { subject: '化学', marks: 93 }
    ];
    
    const total = studentResult.reduce((accumulator, currentValue) => accumulator + currentValue.marks, 0);
    
    console.log(total); // 251
    
    3、展平数组
    const twoDArr = [ [1,2], [3,4], [5,6], [7,8] , [9,10] ];
    
    const oneDArr = twoDArr.reduce((accumulator, currentValue) => accumulator.concat(currentValue));
    
    console.log(oneDArr);
    // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
    
    4、按属性分组对象
    const result = [
      {subject: '物理', marks: 41},
      {subject: '化学', marks: 59},
      {subject: '高等数学', marks: 36},
      {subject: '应用数学', marks: 90},
      {subject: '英语', marks: 64},
    ];
    
    let initialValue = {
      pass: [], 
      fail: []
    }
    
    const groupedResult = result.reduce((accumulator, current) => {
      (current.marks >= 50) ? accumulator.pass.push(current) : accumulator.fail.push(current);
      return accumulator;
    }, initialValue);
    
    console.log(groupedResult);
    
    // 输出----------------------------------------------
    
    {
     pass: [
      { subject: ‘化学’, marks: 59 },
      { subject: ‘应用数学’, marks: 90 },
      { subject: ‘英语’, marks: 64 }
     ],
     fail: [
      { subject: ‘物理’, marks: 41 },
      { subject: ‘高等数学’, marks: 36 }
     ]
    }
    
    5、删除数组中的重复项
    const duplicatedsArr = [1, 5, 6, 5, 7, 1, 6, 8, 9, 7];
    
    const removeDuplicatedArr = duplicatedsArr.reduce((accumulator, currentValue) => {
      if(!accumulator.includes(currentValue)){
        accumulator.push(currentValue);
      }
      return accumulator;
    }, []);
    
    console.log(removeDuplicatedArr);
    // [ 1, 5, 6, 7, 8, 9 ]
    
  • 相关阅读:
    Extjs combobox设置默认值
    sql 游标循环遍历
    .NET中的DES对称加密
    Asp.Net生命周期
    浅谈C#随机数发生器
    面向对象-多态 附抽象
    c#常用的一些命名空间
    c#面向对象编程基础
    string应用
    [自习任我行]第二阶段任务跟踪10
  • 原文地址:https://www.cnblogs.com/zppsakura/p/13685637.html
Copyright © 2020-2023  润新知