zoukankan      html  css  js  c++  java
  • reduce用法

    arr.reduce(callback,[initialValue])

    reduce 为数组中的每一个元素依次执行回调函数callback
    不包括数组中被删除或从未被赋值的元素,接受四个参数:
    /**
    * callback {function(prev, cur, index, arr)}
    * prev 初始值(或者上一次回调函数的返回值)
    * cur 当前元素值
    * index 当前索引
    * arr 调用 reduce 的数组
    * initialValue 可选 传递给函数的初始值
    **/
    

    数组求和

    var arr = [1,2,3,4,1];
    var arr1 = []
    var sum = arr1.reduce((prev,cur,index,arr) => {
        return prev + cur;
    },0)
    console.log(sum) // => 11
    

    数组求乘积

    var mul = arr.reduce((x,y) => x*y)
    console.log(mul) // => 24
    

    求数组最大项

    var max = arr.reduce((x,y) => Math.max(x,y))
    console.log(max) // => 4
    

    数组去重

    var newArr = arr.reduce((x,y) => {
      x.indexOf(y) === -1 && x.push(y)
      return x;
    },[])
    console.log(newArr) // => [ 1, 2, 3, 4 ]
    

    高级用法

    1、计算数组中每个元素出现的次数

    let arr = ['cwl','zgp','gpz','bdd','eq','sd','eq','cwl'];
    let num = arr.reduce((x,y) => {
      if(y in x){  
        x[y]++
      }else{
        x[y] = 1
      }
      return x
    },{})
    console.log(num) // => { cwl: 2, zgp: 1, gpz: 1, bdd: 1, eq: 2, sd: 1 }
    

    2、将二维数组转化为一维

    let arr = [[0,1,2],[5,8],[7,3]];
    let newarr = arr.reduce((x,y) => x.concat(y),[]);
    console.log(newarr) // => [ 0, 1, 2, 5, 8, 7, 3 ]
    

    3、将多维数组转化为一维数组

    let arr = [[0,1],[7,[8,9,10],[2,3,4,[44,55]]]]
    let newArr = (arr) => {
        return arr.reduce((x,y) => x.concat(Array.isArray(y)?newArr(y):y),[])
        }
    console.log(newArr(arr)) // => [ 0, 1, 7, 8, 9, 10, 2, 3, 4, 44, 55 ]
    
  • 相关阅读:
    网站设计大访问量应用的解决方案
    粘贴剪辑版中的数据
    C#中DateTime
    汇总c#.net常用函数和方法集
    ASP.NET配置文件Web.config 详细解释
    URL验证
    把一个下拉框中的选项添加到另一个中
    显示年月日星期和(变动的)时间
    sqlserver 查询版本号
    FreeMarker(三)Map和List
  • 原文地址:https://www.cnblogs.com/cwl1025/p/15091075.html
Copyright © 2011-2022 走看看