我一直想知道他们之间有什么区别。他们似乎都在做同样的事情......
问问题
50972 次
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()
是:
R.forEach()
返回原始数组,同时R.map()
返回一个仿函数R.forEach()
只能对数组进行操作,但R.map()
也可以对对象进行操作(即对象的键/值对被视为数组)
于 2019-05-09T23:51:07.133 回答