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