let arr = [1,2,3,4,5,6];
arr.reduce(function(pre,value,index,array){
console.log(pre,value);
})
结果如下:
1,2
undefined 3
undefined 4
undefined 5
undefined 6
reduce方法回调函数的四个参数的意义:
pre:上一次返回的值(起初调用的时候pre就是数组的第一个值)
value:起初调用时数组的第二个值,下一次调用就是第三个值,以此类推。
let arr = [1,2,3,4,5,6];
arr.reduce(function(pre,value,index,array){
console.log(pre,value);
return 99;
})
结果如下:
1,2
99 3
99 4
99 5
99 6
如果有返回值,那么pre就是返回的值。
let arr = [1,2,3,4,5,6];
arr.reduce(function(pre,value,index,array){
console.log(pre,value);
return 99;
},0)
结果如下:
0,1
99 2
99 3
99 4
99 5
99 6
reduce方法的回调函数如果设置了第二个参数,那么起初调用的时候pre的值就是0,那么value的值就是从数组的第一个值开始的
reduce方法可以用来累加数组里面的值:
let arr = [1,2,3,4,5];
//第一中方法
var res = arr.reduce(function(pre,value){
return pre + value
})
console.log(res)
//第二种方法
var res = arr.reduce(function(pre,value){
return pre+=value
},0)
console.log(res)
reduce方法可以检测数组里面的某个值重复了几次
let arr = [1,2,3,1,1,1];
function arrayCount(array,item){
return array.reduce(function(total,cur){
total += item ==cur?1:0
return total;
},0)
}
console.log(arrayCount(arr,1))
total += item ==cur?1:0 解释
if(item==cur){
total += 1;
}else{
total +=0;
}
reduce可以用来检索数组中的最大值
let arr = [1,2,3,4,5,6,66];
var max = arr.reduce(function(pre,value){
return pre>value?pre:value
})
console.log(max)
reduce方法去重数组
let arr = [1,2,2,3,3,3,4,4,5,5];
arr.reduce(function(arr,cur){
if(arr.includes(cur) === false){
arr.push(cur);
}
return arr;
},[])
利用reduce去除购物车重复商品
let cart = [
{name:"iphone",price:12000},
{name:"imac",price:25000},
{name:"ipad",price:3600},
{name:"ipad",price:3600},
{name:"iphone",price:12000},
];
function filterGoods(goods){
return goods.reduce(function(arr,cur){
let find = arr.find(function(v){
return v.name === cur.name;
})
if(!find)arr.push(cur)
return arr
},[])
}
利用reduce检索购物车中商品价格大于10000的商品名称
let cart = [
{name:"iphone",price:12000},
{name:"imac",price:25000},
{name:"ipad",price:3600}
];
function getGoodsName(goods,price){
return goods.reduce(function(arr,cur){
if(cur.price>price)arr.push(cur)
},[]).map(function(item){
return item.name
})
}
console.log(getGoodsName(cart,10000))