欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS forEach和map方法的用法与区别分析

程序员文章站 2022-11-25 22:58:57
本文实例讲述了js foreach和map方法的用法与区别。分享给大家供大家参考,具体如下: 一、前言 foreach()和map()两个方法都是ecma5中array...

本文实例讲述了js foreach和map方法的用法与区别。分享给大家供大家参考,具体如下:

一、前言

foreach()和map()两个方法都是ecma5中array引进的新方法,主要作用是对数组的每个元素执行一次提供的函数,但是它们之间还是有区别的。jquery也有一个方法$.each(),长得和foreach()有点像,功能也类似。但是从本质上还是有很大的区别的,那么我们探探究竟。

二、foreach和map语法

2.1、语法:

//foreach
array.foreach(callback(currentvalue, index, array){
  //do something
}, this)
//或者
array.foreach(callback(currentvalue, index, array){
  //do something
})
//map:
var new_array = arr.map(callback[, thisarg])
//$.each()
$(selector).each(function(index,element)) //注意参数的顺序

callback: 为数组中每个元素执行的函数,该函数接收三个参数,

参数一:当前数组中元素;参数二:索引; 参数三:当前数组。

this:可选,执行会掉时候,this的指向。

2.2、区别

2.2.1、foreach()返回值是undefined,不可以链式调用。

2.2.2、map()返回一个新数组,原数组不会改变。

2.2.3、没有办法终止或者跳出foreach()循环,除非抛出异常,所以想执行一个数组是否满足什么条件,返回布尔值,可以用一般的for循环实现,或者用array.every()或者array.some();

2.2.4、$.each()方法规定为每个匹配元素规定运行的函数,可以返回 false 可用于及早停止循环。

三、一些栗子

3.1 迭代时的修改

在使用foreach()时候,如果数组在迭代的时候被修改,则其他元素会被跳过。因为 foreach()不会在迭代之前创建数组的副本。

var words = ['one', 'two', 'three', 'four'];
words.foreach(function(word) {
 console.log(word);
 if (word === 'two') {
  words.shift();
 }
});
// one
// two
// four

3.2反转字符串

var str = '12345';
array.prototype.map.call(str, function(x) {  //同时利用了call()方法
 return x;
}).reverse().join('');

3.3一个笔试题。

["1", "2", "3"].map(parseint); //结果 [1, nan, nan]

如果想得到[1, 2,3]应该这么做

function returnint(element){
 return parseint(element,10);
}
["1", "2", "3"].map(returnint);

这主要是因为parseint()默认有两个参数,第二个参数是进制数。当parsrint没有传入参数的时候,而map()中的回调函数时候,会给它传三个参数,第二个参数就是索引,明显不正确,所以返回nan了。

四、兼容性

foreach()map()是ecma5新引入的,可能在标准的其他实现中不存在,在使用前可以要ployfill一下。

具体网上很多吧,更多的是在ie9以下,如果你的项目无视这些,那么你可以不care。

参考:

https://developer.mozilla.org/zh-cn/docs/web/javascript/reference/global_objects/array/foreach

https://developer.mozilla.org/zh-cn/docs/web/javascript/reference/global_objects/array/map

感兴趣的朋友可以使用在线html/css/javascript代码运行工具http://tools.jb51.net/code/htmljsrun测试上述代码运行效果。

ps:这里再为大家推荐一款js数组遍历方式分析对比工具供大家参考:

在线js常见遍历方式性能分析比较工具

更多关于javascript相关内容感兴趣的读者可查看本站专题:《javascript数组操作技巧总结》、《javascript遍历算法与技巧总结》、《javascript面向对象入门教程》、《javascript数学运算用法总结》、《javascript数据结构与算法技巧总结》及《javascript错误与调试技巧总结

希望本文所述对大家javascript程序设计有所帮助。