数组方法重构(part:2)

163 阅读1分钟

indexOf

    function indexOf(arr,search,index){
        if(index===undefined) index=0;
        for(var i=index;i<arr.length;i++){
            if(arr[i]===search) return i;
        }
        return -1;
    }

forEach

    function forEach(arr,fn){
        for(var i=0;i<arr.length;i++){
            if(i in arr) fn(arr[i],i,arr);  //如果i在arr中不为空。
        }
    }
    //桥接模式
    forEach(arr,function(item,index,arr){
        console.log(item,index,arr);
    })

map

function map(arr,fn){
        var arr1=[];
        for(var i=0;i<arr.length;i++){
            if(i in arr) arr1[i]=fn(arr[i],i,arr);
        }
        return arr1;
    }
    
var arr=[1,2,5,,3,6,8];
var arr1=map(arr,function(item){
    return item+10;
});
console.log(arr1);

some

    function some(arr,fn){
        for(var i=0;i<arr.length;i++){
            if(i in arr && fn(arr[i],i,arr)) return true; 
        }
        return false;
    }

every

    function erery(arr,fn){
        for(var i=0;i<arr.length;i++){
            if(i in arr && !fn(arr[i],i,arr)) return false;  //有一个假,就跳出false了
        }
        return true;
    }

filter

    function filter(arr,fn){
        var arr1=[];
        if(arr.length===0) return arr1;
        for(var i=0;i<arr.length;i++){
            if(fn(arr[i],i,arr)) arr1.push(arr[i]);      
        }
        return arr1;
    }

reduce

    function reduce(arr,fn,initValue){
        var index=0;
        if(initValue===undefined){
            initValue=arr[0];
            index=1;
        }
        for(;index<arr.length;index++){
            initValue=fn(initValue,arr[index],index,arr);
        }
        return initValue;
    }

flatMap(扁平化数组)

var arr=[[1,2,3],[4,5,6,2],[7,5,8,9]];
    function reFlat(arr){
        var arr1=[];
        for(var i=0;i<arr.length;i++){
            if(i===0){
                for(var index in arr[0]){
                    arr1[index]=arr[0][index];
                }
            }else{
                for(var index in arr[i]){
                    arr1[arr1.length]=arr[i][index];
                }
            }
        }
        return arr1;
    }