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 }
})