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)
    
  • 相关阅读:
    模态框获取内容jQuery
    jQuery支持链式编程,一句话实现左侧table页+常用筛选器总结
    jquery实现全选、取消反选、加JavaScript三元运算(三种法法实现反选)
    用dom1来实现,根据光标移动自动给表单加上背景色,光标移开自动去除背景色
    JavaScript两种创建标签的的方法,实现点击按钮让text自增
    vue前端路由搜索功能实现
    pycharm配置vue
    QT全局事件和绑定
    mysql事务、锁
    web前端上传文件按钮自定义样式
  • 原文地址:https://www.cnblogs.com/aloneer/p/14500824.html
Copyright © 2011-2022 走看看