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想要的。