.map,.every和.forEach有什么区别?

时间:2011-09-07 21:46:35

标签: javascript foreach map-function

我一直想知道它们之间有什么区别。他们似乎都做同样的事情......

4 个答案:

答案 0 :(得分:196)

区别在于返回值。

.map() 返回通过对原始项执行某些操作而创建的新对象数组

.every() 返回布尔值 - 如果此数组中的每个元素都满足提供的测试函数,则为true。与.every()的一个重要区别是,可能并不总是为数组中的每个元素调用测试函数。一旦测试函数对任何元素返回false,就不再迭代数组元素。因此,测试功能通常应该没有side effects

.forEach() 不返回任何内容 - 它会迭代数组,为数组中的每个项执行给定的操作。

修改:如果您愿意,可以使用MSDN Docs

答案 1 :(得分:76)

gilly3的答案很棒。我只是想添加一些关于其他类型的“循环元素”函数的信息。

  • .every()(第一次迭代器返回false或停止循环 虚假的东西)
  • .some()(第一次停止循环迭代器 返回true或者真实的东西)
  • .filter()(创建一个新数组 包括filter函数返回true和的元素 省略它返回false的那些)
  • .map()(根据迭代器返回的值创建一个新数组 功能)
  • .reduce()(通过重复调用迭代器来构建一个值, 传入以前的值;详见规格;有用 用于汇总数组的内容和许多其他内容)
  • .reduceRight()(就像减少,但是工作在降序而不是 升序)

归功于:T.J.Crowder For-each over an array in JavaScript?

答案 2 :(得分:5)

对上述伟大答案的另一个考虑是链接。使用forEach(),您无法链接,但使用map(),您可以。

例如:

var arrayNumbers = [3,1,2,4,5];

arrayNumbers.map(function(i) {
    return i * 2
}).sort();

使用.forEach(),你不能执行.sort(),你会收到错误。

答案 3 :(得分:0)

对于RamdaR.map()R.forEach()之间的区别是:

  1. R.forEach()返回原始数组,而R.map()返回原始数组 函子
  2. R.forEach()只能对数组进行操作,而R.map()也可以对对象进行操作(即,该对象的键/值对被处理了) 就像一个数组)