可以在Array.every,Array.some e.t.c中更改数组的值

时间:2014-11-15 10:06:51

标签: javascript functional-programming

以下代码有效。但这是在函数式编程风格的方法中修改数组值的正确方法。

a = [1, 2, 3];
a.every(function(val,index, arr) {
 if (val === 2) {
    arr[index] += 1;
 }
});

2 个答案:

答案 0 :(得分:1)

没有。虽然您的代码有效,但从概念上讲,您应该使用forEach方法,请参阅here(另外,为了便于阅读,请删除arr参数并使用this。)

答案 1 :(得分:0)

  

但这是在函数式编程风格的方法中修改数组值的正确方法。

没有。使用函数式编程范例,您不应修改任何对象(无论您使用何种方法)。更好:

var a = [1, 2, 3];
var b = a.map(function(val) {
  return (val === 2) ? 3 : val;
});

请注意,像你一样使用every毫无意义 - 你对测试所有元素的谓词不感兴趣。当你真的想要从你的回调中执行副作用时,你应该使用forEach(这不是很有用,但至少可以明确你的意图)。