132

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

4

4 回答 4

251

不同之处在于返回值。

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

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

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

在 MDN阅读这些以及许多其他数组迭代方法

于 2011-09-07T21:52:39.677 回答
99

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

  • .every()(当迭代器第一次返回 false 或某些错误时停止循环)
  • .some()(当迭代器第一次返回 true 或一些真实的东西时停止循环)
  • .filter()(创建一个新数组,包括过滤函数返回 true 的元素并省略返回 false 的元素)
  • .map()(根据迭代器函数返回的值创建一个新数组)
  • .reduce()(通过重复调用迭代器来建立一个值,传入以前的值;有关详细信息,请参阅规范;对于对数组的内容和许多其他内容求和很有用)
  • .reduceRight()(类似于reduce,但以降序而不是升序工作)

归功于:TJCrowder For-each 在 JavaScript 中的数组上?

于 2014-07-31T13:48:52.197 回答
6

对上述出色答案的另一个考虑是链接。使用 forEach() 你不能链接,但使用 map(),你可以。

例如:

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

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

使用 .forEach(),你不能做 .sort(),你会得到一个错误。

于 2016-06-23T22:23:04.063 回答
0

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

  1. R.forEach()返回原始数组,同时R.map()返回一个仿函数
  2. R.forEach()只能对数组进行操作,但R.map()也可以对对象进行操作(即对象的键/值对被视为数组)
于 2019-05-09T23:51:07.133 回答