zoukankan      html  css  js  c++  java
  • Javascript数组 reduce() 方法

    语法

    • arr.reduce( callback, initialValue )

    简介

      reduce 为数组中的每一个元素依次执行回调函数,接受四个参数:初始值(或者上一次回调函数的返回值)、当前元素值、当前索引、调用 reduce 的数组。

       注意: reduce对于空数组是不会执行回调函数的。

       callback 的参数:

          1.previousValue (上一次回调返回的值,或者是提供的初始值)

          2.currentValue (数组中当前被处理的元素)

          3.index (当前元素在数组中的索引)

          4.array (调用 reduce 的数组)

    initialValue 参数

      let arr = [1, 2, 3, 4];
      let sum = arr.reduce(function(prev, cur, index, arr) {
        console.log(prev, cur, index);
        return prev + cur;
      })
      console.log(arr, sum);
    
      输出的结果为:
    
      1 2 1
      3 3 2
      6 4 3
      [1,2,3,4] 10
    
    • 如果 reduce() 方法不提供 initialValue 初始值,则元素索引是从1(数组的第二个元素)开始,初始值为数组的第一个元素
      let arr = [1, 2, 3, 4];
      let sum = arr.reduce(function(prev, cur, index, arr) {
        console.log(prev, cur, index);
        return prev + cur;
      },0)
      console.log(arr, sum);
    
      输出的结果为:
    
      0 1 0
      1 2 1
      3 3 2
      6 4 3
      [1,2,3,4] 10
    
    • 如果 reduce() 方法提供 initialValue 初始值,则元素索引是从0(数组的第一个元素)开始,初始值为提供的值
    空数组
    • 对于空数组如果不提供 initialValue 初始值,则会报错 TypeError: Reduce of empty array with no initial value

    • 对于空数组如果提供 initialValue 初始值,则不会报错

    用法

    • 求和
      let arr = [1, 2, 3, 4];
      console.log(arr.reduce((x,y)=>x+y));  // 10
    
    • 求乘积
      let arr = [1, 2, 3, 4];
      console.log(arr.reduce((x,y)=>x*y));  // 24
    
    • 计算数组中每个元素出现的次数
      let arr = [1,2,3,4,5,6,7,1,2,4];
    
      写法一:
      let arrcount = arr.reduce((pre,cur)=>{
        if(cur in pre){
          pre[cur]++
        }else{
          pre[cur] = 1;
        }
        return pre
      },{})
      console.log(arrcount);
    
      写法二:
      let arrcount = arr.reduce((pre,cur)=>(pre[cur]++ || (pre[cur] = 1),pre),{})
      console.log(arrcount);
    
    • 数组去重
      let arr = [1,2,3,4,5,6,7,1,2,4];
      let newarr = arr.reduce((pre,cur)=>{
        if(!pre.includes(cur)){
          return pre.concat(cur)
        }else{
          return pre
        }
      },[])
      console.log(newarr)
    
    • 将二维数组转化为一维数组
      let arr = [[0, 1], [2, 3], [4, 5]]
      let newArr = arr.reduce((pre,cur)=>{
        return pre.concat(cur)
      },[])
      console.log(newArr); 
    
    • 对象属性求和
      let result = [
        {
          subject: 'math',
          score: 10
        },
        {
          subject: 'chinese',
          score: 20
        },
        {
          subject: 'english',
          score: 30
        }
      ];
    
      let sum = result.reduce(function(prev, cur) {
        return cur.score + prev;
      }, 0);
      console.log(sum)
    
  • 相关阅读:
    [Javascript] Javascript numeric separators
    [RxJS] Extend Promises by Adding Custom Behavior
    [RxJS] Building an RxJS Operator
    [RxJS] Build an Event Combo Observable with RxJS (takeWhile, takeUntil, take, skip)
    [RxJS] Encapsulate complex imperative logic in a simple observable
    Android之Android软键盘的隐藏显示研究
    Android之LogUtil
    Android之使用XMLPull解析xml(二)
    Android之多媒体扫描过程
    Android之在Tab更新两个ListView,让一个listview有按下另个一个listview没有的效果
  • 原文地址:https://www.cnblogs.com/aloneer/p/14500824.html
Copyright © 2011-2022 走看看