forEach,map 和 reduce
forEach
遍历给定数组并使用当前索引作为参数调用传入的函数
_.forEach = (array,fn)=>{
for(const value of array){
fn(value);
}
}
map
map与forEach非常相似,区别只是用一个新的数组捕获了结果。
_.map = (array,fn)=>{
let results = [];
for(const value of array){
results.push(fn(value));
}
return results;
}
reduce
设置累加器并遍历数组(记住累加器上一个值)以生成一个单一元素的过程称为归约数组
reduce 函数会记录以前的运算结果,然后与后面传入的参数一起运算,最后返回一个结果
注意:
如果不传入初始值时,只可以遍历数组,但是如果传入初试值,可以遍历数组或者对象 所以推荐统一传入初始值
_.reduce = (array,fn,initialValue)=>{
//判断是否传入初始值
let accumlator = initialValue === undefined ? array[0] : initialValue;
if(initialValue === undefined){
for(let i = 1,len = array.length;i<len;i++){
accumlator = fn(accumlator,array[i]);
}
}else{
for(const value of array){
accumlator = fn(accumlator,value);
}
}
return accumlator;
}
示例:
let a = [1,2,3,4];
console.log(_.reduce(a,(acc,next)=>acc+next,0));//10
Last updated
Was this helpful?