资讯专栏INFORMATION COLUMN

JavaScript中的数组遍历forEach()与map()的区别

Mr_zhang / 1496人阅读

摘要:加粗文字不管是还是在下都不兼容不兼容的情况下在上没有这两个方法那么需要我们自己封装一个都兼容的方法,代码如下遍历数组回调函数上下文下自己编写回调函数执行的逻辑遍历数组回调函数上下文下自己编写回调函数执行的逻辑

原理:

高级浏览器支持forEach方法
语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文;

forEach:用来遍历数组中的每一项;这个方法执行是没有返回值的,对原来数组也没有影响;

数组中有几项,那么传递进去的匿名回调函数就需要执行几次;

每一次执行匿名函数的时候,还给其传递了三个参数值:数组中的当前项item,当前项的索引index,原始数组input;

理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行修改;但是我们可以自己通过数组的索引来修改原来的数组;

forEach方法中的this是ary,匿名回调函数中的this默认是window;

var ary = [12,23,24,42,1];
var res = ary.forEach(function (item,index,input) {
     input[index] = item*10;
})
console.log(res);//-->undefined;
console.log(ary);//-->会对原来的数组产生改变;

map:和forEach非常相似,都是用来遍历数组中的每一项值的,用来遍历数组中的每一项;

区别:map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的数组,只是相当于把原数组克隆一份,把克隆的这一份的数组中的对应项改变了);

不管是forEach还是map 都支持第二个参数值,第二个参数的意思是把匿名回调函数中的this进行修改。

var ary = [12,23,24,42,1];
var res = ary.map(function (item,index,input) {
     return item*10;
})
console.log(res);//-->[120,230,240,420,10];
console.log(ary);//-->[12,23,24,42,1];

加粗文字

不管是forEach还是map在IE6-8下都不兼容(不兼容的情况下在Array.prototype上没有这两个方法),那么需要我们自己封装一个都兼容的方法,代码如下:

/**
* forEach遍历数组
* @param callback [function] 回调函数;
* @param context [object] 上下文;
*/
Array.prototype.myForEach = function myForEach(callback,context){
    context = context || window;
    if("forEach" in Array.prototye) {
        this.forEach(callback,context);
        return;
    }
    //IE6-8下自己编写回调函数执行的逻辑
    for(var i = 0,len = this.length; i < len;i++) {
        callback && callback.call(context,this[i],i,this);
    }
}
/**
* map遍历数组
* @param callback [function] 回调函数;
* @param context [object] 上下文;
*/
Array.prototype.myMap = function myMap(callback,context){
    context = context || window;
    if("map" in Array.prototye) {
        return this.map(callback,context);
    }
    //IE6-8下自己编写回调函数执行的逻辑
    var newAry = [];
    for(var i = 0,len = this.length; i < len;i++) {
        if(typeof  callback === "function") {
            var val = callback.call(context,this[i],i,this);
            newAry[newAry.length] = val;
        }
    }
    return newAry;
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102466.html

相关文章

  • JavaScript数组遍历(迭代)方法介绍

    摘要:中一共有五种数组遍历迭代方法,它们都会对数组中每个元素执行一些业务,且都不会修改原数组,这些方法包括如果该函数任意一项返回,则返回,如果全部返回则最终返回如果该函数每一项都返回,则返回,否则返回会返回一个新数组,该数组是由满足条件的任意项组 ES5中一共有五种数组遍历(迭代)方法,它们都会对数组中每个元素执行一些业务,且都不会修改原数组,这些方法包括: 1、some() 如果该函数任意...

    Pikachu 评论0 收藏0
  • JS 数组循环遍历方法对比

    摘要:循环方法方法不改变原数组方法会给原数组中的每个元素都按顺序调用一次函数。筛选出过滤出数组中符合条件的项组成新数组代码方法方法为数组中的每个元素执行一次函数,直到它找到一个使返回表示可转换为布尔值的值的元素。 showImg(https://segmentfault.com/img/bV2QTD?w=1600&h=500); 前言 JavaScript 发展至今已经发展出多种数组的循环遍...

    BlackFlagBin 评论0 收藏0
  • JavaScript es5Array常用forEachmap、filter、indexOf

    摘要:的的区别和相同之处就是数组的遍历循环,回调支持三个参数,第个是遍历的数组内容第个是对应的数组索引,第个是数组本身他是没有返回值得,不需要再下面,更进一步,除了接受一个必须的回调函数参数,还可以接受一个可选的上下文参数改变回调函数里面 Array的forEach、map的区别和相同之处 forEach 1、 forEach就是数组的遍历、循环 ,回调支持三个参数,第1个是遍历的数组内容;...

    xuexiangjys 评论0 收藏0
  • JavaScript遍历方法小结

    摘要:遍历方法小结常用的遍历方法遍历对数组的每个元素执行一次提供的函数创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果遍历大家都熟悉,所以重点讲一下与的区别相同点回调函数参数相同,都自带三个属性均不会修改原数组第二参数的 遍历方法小结 常用的遍历方法 for 遍历 forEach(对数组的每个元素执行一次提供的函数) map(创建一个新数组,其结果是该数组中的每个...

    flyer_dev 评论0 收藏0
  • JavaScript 小知识点

    摘要:比如,构造函数返回的数组都是空位。方法方法方法方法方法方法方法方法对空位的处理则是明确将空位转为。在这些情况下,迭代器关闭。 原型链相关 最详尽的 JS 原型与原型链终极详解 isNaN() 和 Number.isNaN() 的区别 isNaN() 是 ES1 规范; 是全局方法; 如果参数不是一个 Number 类型,会先尝试将参数转化为数值,然后对转换后的结果进行是否是 Na...

    马永翠 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<