数组之reduce一些用法

110 阅读1分钟

数组之reduce详解

  1 reduce定义 
      reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)
      开始缩减,最终计算为一个值。 
      注意:reduce()对于空数组是不会执行回调函数的

  2 语法
    array.reduce(function(prev, cur, index, arr), init)
    prev (上一次调用回调返回的值,或者是提供的初始值)
    item (数组中当前被处理的元素)
    index (当前元素在数组中的索引)
    arr (调用的数组)
    init (传递给函数的初始值)
 ```
1、累加 带初始值
      let arr= [1,2,3,4]
      let sum = arr.reduce((prev,item) => {
          return prev + item
      },10)
      console.log(sum) //20
      
2、累加不带初始值
         let arr= [1,2,3,4]
         let sum = arr.reduce((prev,item) => {
              return prev + item
          },)
         console.log(sum) //10
     
3、reduce数组去重
         let arr = [1,2,3,3,2,1,4]
         arr.reduce((prev,item) => {
           if(!(prev.includes(item))){
             prev.push(item)
           }
           return prev
         },[])
         // [1,2,3,4]
     
4、reduce求数组中最大值
         let arr= [1,2,3,4]
         arr.reduce((prev,item) => {
           return Math.max(prev,item)
         })
         // 4
     
5、reduce将二维数组转为转为一维数组
         let arr= [[1,2],[3,4],[5,6]]
         arr.reduce((prev,item) => {
            return prev.concat(item)
         },[])
         // [1,2,3,4,5,6]
         
6、reduce对象属性里面求和
         let arr = [
             {name: 'zs',age: 19},
             {name: 'ls',age: 21},
             {name: 'zl',age: 23}
         ]
         arr.reduce((prev,item) => {
             return prev + item.age
         },0)
         //63
         
7、reduce 实现forEach
         let arr= [1,2,3,4]
         Array.prototype.reduceForEach = function(callback) {
            this.reduce((prev,item,index,array) => {
              callback(item,index)
           },[])
         }
         
         arr.reduceForEach((item,index,array) => {
           console.log(item,index)
         })
         //1234 
         //0123
8、reduce 实现map
         let arr= [1,2,3,4]
         Array.prototype.reduceMap = function(callback) {
            return this.reduce((prev,item,index,array) => {
              const arr2 = callback(item,index,array)
              prev.push(arr2)
              return prev
            },[])
         }
         arr.reduceMap((item,index) => item)
         //[1, 2, 3, 4]
         
         arr.reduceMap((item,index) => {
          return item + index 
         })
         //[1, 3, 5, 7]
         
9、reduce实现过滤 filter
        let arr =[1,2,3,4]
        Array.prototype.reduceFilter = function(callback) {
          return this.reduce((prev,item,index,array) => {
           if(callback(item,index,array)){
             prev.push(item)
           }
           return prev
          },[])
        }
        arr.reduceFilter(item => item !== 2)
        //[1, 3, 4]
        
  ```