Javascript 可以在数组中更改数组的值吗
下面的代码可以工作。但是,在函数式编程风格的方法中修改数组值是否正确Javascript 可以在数组中更改数组的值吗,javascript,functional-programming,Javascript,Functional Programming,下面的代码可以工作。但是,在函数式编程风格的方法中修改数组值是否正确 a = [1, 2, 3]; a.every(function(val,index, arr) { if (val === 2) { arr[index] += 1; } }); 不可以。虽然您的代码可以工作,但从概念上讲,您应该使用forEach方法,请参阅。 (另外,为了便于阅读,请删除arr参数并使用this) 但是,在函数式编程风格的方法中修改数组值是否正确 a = [1, 2, 3]; a.every(
a = [1, 2, 3];
a.every(function(val,index, arr) {
if (val === 2) {
arr[index] += 1;
}
});
不可以。虽然您的代码可以工作,但从概念上讲,您应该使用
forEach
方法,请参阅。
(另外,为了便于阅读,请删除arr
参数并使用this
)
但是,在函数式编程风格的方法中修改数组值是否正确
a = [1, 2, 3];
a.every(function(val,index, arr) {
if (val === 2) {
arr[index] += 1;
}
});
不可以。在函数式编程范例中,您不应该修改任何对象(无论您使用什么方法)。更好:
请注意,像您那样使用
每一个都是没有意义的-您对测试所有元素上的谓词不感兴趣。当你真的想从回调中产生副作用时,你应该使用forEach
(这不是很实用,但至少让你的意图很清楚)。不是真的,你可能想要map
而不是每个。为什么不呢?您可以在some
和every
中修改数组值。您也可以删除值,方法仍将按预期工作。事实上,这两种方法都是为了支持这种行为而设计的。然而,在您的示例中,您不应该使用每一个
,您应该使用映射
。如果要使用映射
,过滤器
,等等。。。你最好避免变异,并按照我认为需要的方式继续下去。如果我需要“修改”数组而没有方法帮助,那么我会使用reduce
和一个全新的累加器。只是说它取决于变量(在这个特定的例子中,map
是更惯用的函数),不过一般来说,如果您想从函数中编辑数组,最好使用forEach
。另外,forEach
不是jQuery方法,因此此
引用全局对象或在严格模式下未定义。@Qantas94Heavy,您完全正确,此
不能在回调中使用。我将编辑我的答案。然而,我不同意使用map
,因为它的目的是创建一个新的数组,而这不是OP想要的。