SOURCE

let arr = [1,2,3]

// reduce (叠加器,存在返回值,不改变原数组,对数组中的每个元素) 
// array.reduce((t,v,i,a)=>{},initValue)
// total(t):累加器完成计算的返回值(必选)
// value(v):遍历的每一项元素(必选)
// index(i):遍历的每一项元素的索引(可选)
// array(a):遍历的每一项元素所属的数组对象(可选)

// 叠加
let arr1 = arr.reduce( (t,v) => (+t)+(+v),[])
console.log(arr1)

// 求数组的最大值和最小值
let arr2 = arr.reduce( (t,v)=> t<v? v:t)
console.log(arr2)
let arr3 = arr.reduce( (t,v)=> t>v?v:t)
console.log(arr3)

// 找到等于2的那一项索引 (找不到则返回-1)
let arr4 = arr.reduce( (t,v,i) => v == 1 ? i:-1 )
console.log(arr4)

// reduce代替forEach
let arr5 = arr.reduce( (t,v)=> t+(v*2))
console.log(arr5)

// reduce代替map (需要传一个默认的初始值 [])
let arr6 = arr.reduce((t,v)=> [...t,v*3],[] )
console.log(arr6)

// reduce代替some (t是累计的每一项结果, 默认初始值是 false)
// let arr7 = arr.reduce( (t,v) => t || v < 3 ,false)
let arr7 = arr.reduce( (t,v) => {
    // console.log(t)
   return   t || v > 3
},true)
console.log(arr7)
console.log('------')


// reduce代替every (默认初始值是 true)
// let arr8 = arr.reduce( (t,v)=> t && v<=2,true )
let arr8 = arr.reduce( (t,v)=>{
    // console.log(t)
   return t && v<=2
},false)
console.log(arr8) //  false

// reduce代替filter 
let arr9 = arr.reduce( (t,v)=>v !==2? [...t,v] :t,[])
console.log(arr9) // [1,3]


// reduce查找对应项的索引 (默认项是 -1)
let arr10 = arr.reduce((t,v,i)=> v==2? i:t,-1)
console.log(arr10)  // 1

// reduce去重  排除已经有的项
let ary = [1,2,3,3,2,5,6,5,7,5]
let arr11 = ary.reduce( (t,v)=> t.includes(v)? t:[...t,v],[])
console.log(arr11)

console 命令行工具 X clear

                    
>
console