【发布时间】:2016-08-08 01:26:36
【问题描述】:
这里有一些我不明白的地方。我几天前刚刚了解到的map 函数应该是一个了不起的函数,如果我找到它的用途,它将改变我编写代码的方式。但我仍然看不出它与forEach 有何不同。唯一的区别是传递给map 的函数将当前元素替换为return 值。但是forEach 也可以做到这一点,这意味着map 只是forEach 的一个不太通用的版本。
MDN 上的示例:
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots is now [1, 2, 3], numbers is still [1, 4, 9]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
好的,很酷,我猜?
我可以用 forEach 做到这一点:
var numbers = [1, 4, 9];
var roots = numbers.forEach(function(el){el=Math.sqrt(el);});
// roots is now [1, 2, 3], numbers is still [1, 4, 9]
其他例子:
var kvArray = [{key:1, value:10}, {key:2, value:20}, {key:3, value: 30}];
var reformattedArray = kvArray.map(function(obj){
var rObj = {};
rObj[obj.key] = obj.value;
return rObj;
});
// reformattedArray is now [{1:10}, {2:20}, {3:30}],
// kvArray is still [{key:1, value:10}, {key:2, value:20}, {key:3, value: 30}]
我可以用forEach 做到这一点,它看起来几乎一模一样。
map 有什么好的?在 forEach 不起作用的情况下,它工作得非常好的例子是什么?
【问题讨论】:
-
forEach 返回 undefined 而 map 没有。你可以问同样的问题
indexOf。只需使用 forEach 并记住第一个索引。它只是更方便。 -
roots没有您描述的结果。 jsfiddle.net/o77z9ch1 -
@nils Type-o。现已修复。
-
您的
.forEach示例错误。
标签: javascript functional-programming