.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(),你会得到一个错误。