reduce
使用 reduce 与 reduceRight 函数可以迭代数组的所有元素,reduce 从前开始 reduceRight 从后面开始。下面通过函数计算课程点击数的和。
reduce函数的第一个参数是执行函数,第二个参数是初始值
- 传入第二个参数时将所有元素循环一遍
- 不传第二个参数时从第二个元素开始循环
执行函数的参数:
参数 | 说明 |
---|---|
prev | 上次调用回调函数返回的结果 |
cur | 当前元素值 |
index | 当前的索引值 |
array | 原数组 |
案例
- 统计元素出现的次数
function countArrayELem(array, elem) {
return array.reduce((total, cur) => (total += cur == elem ? 1 : 0), 0);
}
let numbers = [1, 2, 1, 1, 5];
console.log(countArrayELem(numbers, 1)); //3
- 取数组中的最大值
//取数组最大值
function maxArray(array){
return array.reduce(((max,cur)=>max<cur?cur:max),array[0]);
}
let arr=[5,3,6,1,2,9];
console.log(maxArray(arr));//9
- 取价格最高的商品
let cart = [
{ name: "iphone", price: 12000 },
{ name: "imac", price: 25000 },
{ name: "ipad", price: 3600 }
];
function maxGoods(cart){
return cart.reduce(((goods,cur)=>goods.price<cur.price?cur:goods),cart[0]);
}
console.log(maxGoods(cart)); //{name: 'imac', price: 25000}
- 获取价格超过1万的商品名称
let goods = [
{ name: "iphone", price: 12000 },
{ name: "imac", price: 25000 },
{ name: "ipad", price: 3600 }
];
function getGoods(goods,price){
return goods.reduce(((arr,cur)=>{
if(cur.price>price) arr.push(cur);
return arr;
}),[]).map(cur=>cur.name);
}
console.table(getGoods(goods,10000));
- 数组去重
//数组去重
let arr=[2,3,1,4,1,2];
function clearArray(array){
return array.reduce(((arr,cur)=>{
if(arr.includes(cur)=== false)
// arr.push(cur);
arr = [...arr, cur];
return arr;
}),[])
};
console.log(clearArray(arr));