我一直想知道它们之间有什么区别。他们似乎都做同样的事情......
答案 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)
对于Ramda,R.map()
和R.forEach()
之间的区别是:
R.forEach()
返回原始数组,而R.map()
返回原始数组
函子R.forEach()
只能对数组进行操作,而R.map()
也可以对对象进行操作(即,该对象的键/值对被处理了)
就像一个数组)