.map,.every和.forEach有什么区别?
我一直在想他们之间的区别是什么。 他们似乎都做同样的事情…
区别在于返回值。
.map()
返回通过对原始项目执行一些操作而创build的新对象数组 。
.every()
返回一个布尔值 – 如果此数组中的每个元素均满足提供的testing函数,则返回 true。 .every()
一个重要区别是testing函数不一定总是被调用数组中的每个元素。 一旦testing函数对任何元素返回false,不会再有数组元素被迭代。 因此,testingfunction通常应该没有副作用 。
.forEach()
返回任何内容 – 它迭代Array对Array中的每个项执行给定的操作。
编辑:这是MSDN文档,如果你喜欢。
gilly3的答案很好。 我只是想添加一些有关其他types的“循环元素”function的信息。
-
.every()
(停止循环第一次迭代器返回false或falsey) -
.some()
(停止循环第一次迭代器返回true或truthy) -
.filter()
(创build一个新的数组,包括过滤函数返回true的元素,并省略返回false的元素) -
.map()
(根据迭代器函数返回的值创build一个新数组) -
.reduce()
(通过重复调用迭代器来生成一个值,传入之前的值;详细信息请参考规范;对数组的内容和许多其他内容的总和很有用) -
.reduceRight()
(如reduce,但是按降序而不是升序排列)
信贷:TJCrowder 对于每个在JavaScript中的数组?
对上述优秀答案的另一个考虑是链接。 用forEach()你不能连锁,但是用map(),你可以。
例如:
var arrayNumbers = [3,1,2,4,5]; arrayNumbers.map(function(i) { return i * 2 }).sort();
与.forEach(),你不能做的.sort(),你会得到一个错误。