【发布时间】:2015-01-12 17:04:36
【问题描述】:
以下代码有效。但它是在函数式编程风格的方法中修改数组值的正确方法吗?
a = [1, 2, 3];
a.every(function(val,index, arr) {
if (val === 2) {
arr[index] += 1;
}
});
【问题讨论】:
-
不是真的,你可能想要
map而不是every。 -
为什么不呢?您可以修改
some和every中的数组值。您也可以删除值,并且方法仍将按预期工作。事实上,这两种方法都旨在支持这种行为。 ecma-international.org/ecma-262/5.1/#sec-15.4.4.17 但是在你的例子中你不应该使用every你应该使用map。 -
如果你要使用
map、filter等......你最好避免突变,继续我认为它需要的风格。如果我需要“修改”数组并且没有方法帮助,那么我会使用reduce和一个全新的累加器。 -
对于这个用例来说,使用 for 循环似乎很合法,除非您实际上还需要旧版本的数组。只是说
标签: javascript functional-programming