数组中的迭代方法的重写和使用

/**

 * every()对数组中的每一项运行给定的的函数,如果任意每一项满足要求,就返回true,不满足就返回false

 * 不受执行函数的影响

 * 注意:every不会对空数组进行检测,不会改变原始数组

 */

//封装  重写every() -->  myEvery()

Array.prototype.myEvery = function(fn){

    var arr = this;

    for(var i =0;i<arr.length;i++){

        var bool = fn(arr[i],i,arr);

        if(bool)  return false;

    }

    return true;

}

var arr = [100,200,300,400];

var result1 = arr.myEvery(function(item,index,arr){

    return item > 200;

});

console.log(result1);//false  都大于200才返回true 


 

/**

 * some();对数组中的每一项运行给定的函数,如果有任意一项满足,则返回true

 */

//封装  重写 some() -->mySome()

Array.prototype.mySome = function(fn){

    // var arr = this;

    for(var i =0;i<this.length;i++){

        var bool = fn(this[i],i,this);

        if(bool)  return true ;

    }

    return false;

}

var arr = [1,2,3,4];

var result2 = arr.mySome(function(item,index,arr){

    return item>2;

});

console.log(result2);//true  有一项大于200就返回true,都不大于200则返回false

/**

 * filter()过滤,给数组中的每一项运行给定的 函数,满足要求的留着,不满足要求的不要,返回的是满足要求的数据项组成的数组

 */

//封装  filter   -->  myFilter()

Array.prototype.myFilter = function(fn){

    var result=[];

    for(var index in this){

        var bool = fn(this[index],index,this);//迭代

        if(bool) result.push(this[index]);

        //result[result.length]=result[index]

    }

    return result ;

}

var arr = [1,2,3,4,5,6];

var result = arr.myFilter(function(item,index,arr){

    return item >2;

});

console.log(result);

//关于过滤的另外一种封装方法

Array.prototype.myFilter = function(fn){

    var arr = this;//数组本身

    len = arr.length;//数组长度

    arg = arguments[1]||global;//如果有第二个参数,this就指向它,没有的话就指向global

    newArr = [];//定义新数组

    for(var i=0;i<len;i++){

        item = JSON.parse(JSON.stringify(arr[i]));//深拷贝

        fn.apply(arg,[item,i,arr])? newArr.push(item):''

        //条件为真添加到newArr里面,假就返回空

    }

    return newArr;//返回新数组

}

var arr = [1,2,3,4,5,6];

var result = arr.myFilter(function(item,index,arr){

    return item >3;

});

console.log(result);


 

/**

 * forEach()对数组中的每一项运行给定的函数,没有返回值,常用来遍历

 * 注意:forEach()对于空数组是不会执行回调函数的

 */

//封装  重写forEach()--->myForEach()

Array.prototype.myForEach = function(fn){

    for(var i =0;i<this.length;i++){

        fn(this[i],i,this)

    }

}
 

/**

 * map()给数组中的每一项运行给定的函数,返回每次函数调用的结果形成的数组

 * 一一映射

 */

//封装  重写map()-->myMap()

Array.prototype.myMap = function(fn){

    var result = [];

    this.myForEach(function(item,index,arr){  //使用了上面的forEach()的重写

        var r = fn(item,index,arr);

        result.push(r);

    });

    return result;

}

var arr = [1,2,3,4,5,6];

var result = arr.myMap(function(item,index,arr){

    return item*3;

});

console.log(result);


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值