reduce方法的使用

96 阅读2分钟

reduce 接收 2 个参数: 第一个参数是回调函数(必选),第二个参数是初始值 initialValue(可选) 而第一个参数(回调函数),接收下面四个参数:

  • Accumulator (acc) (累计器)
  • Current Value (cur) (当前值)
  • Current Index (idx) (当前索引)
  • Source Array (src) (源数组)

应用

数组求和

reduce方法本意就是用来记录循环的累积结果

 let arr= [1,2,3,4,5,6]
  let total=arr.reduce((pre,cur)=>{
    return pre+cur  
  })
  console.log(total)//21
  //加上第二个参数
  let arr= [1,2,3,4,5,6]
  let total=arr.reduce((pre,cur)=>{
    return pre+cur  
  },90)
  console.log(total)// 110

数组去重


 let arr= [1,2,3,3,3,3,4,null,null,{},{},{a:1},{a:1}]
  let newarr=arr.reduce((pre,cur)=>{
    return pre.includes(cur)?pre:pre.concat(cur)
  },[])
  console.log(newarr)//[1,2,3,4,null,{},{},{a:1},{a:1}]

数组降维

 let arr=[[1,2],[3,4],[5,6]]
  let newarr=arr.flat()
  let newarr2=arr.reduce((pre,cur)=>{
    return pre.concat(cur)
  },[])
  
//  如果是多维数组
  console.log({newarr,newarr2})
  let arr2=[0,1,[2,3],[4,[5,6,7]]]
  function Test(arr){
    return arr.reduce((pre,cur)=>{
      return pre.concat(Array.isArray(cur)?Test(cur):cur)
    },[])
  }
   console.log(Test(arr2))

sort方法的使用

对数组进行排序,会改变原数组并返回排序后的数组

let arr=[1,3,56,78]
arr.sort(function(a,b){return a-b })

a-b是升序,b-a是降序

sort方法是对数组中的值进行冒泡排序 a b 代表相邻的两个元素 需要注意的是a 代表后一个元素 b 代表前一个元素

如果返回值>0 即正数。也就是true 代表符合要求,不用交换 如果返回值<0 即负数,也就是false ,代表不符合要求 ,交换。如果返回值=0 交换函数失败,不动

let arr =[1,3,5,6,7,2]
arr.sort((a,b)=>{
  if(a>b) return 1
  else return -1
})

//按年龄从小到大排序 年龄相同,时间大的在前
let arr=[{name:'a',age:12,time:1271367769},{name:'b',age:3,time:276799697},{name:'c',age:3,time:276799697},{name:'d',age:2,time:67696797}]
arr.sort(function(a,b){
  let age1=a.age;
  let age2=b.age;
  if(ag1=age2){
   let time1=a.time;
   let time2=b.time;
   return time2-time1
  } else{  return age1-age2 }
 
})