数组映射函数不改变元素

Array map function doesn't change elements

在JavaScript中,我有一个数组,就是

array = [true, false]

在某些情况下,我正在尝试初始化这个数组

array.map(item => {
   item = false
})

上面的代码运行之后,数组没有变,还是[true, false],所以.map有时候不靠谱吗?


还有一个问题: 在 运行 我下面的代码之后,数组被改变了。为什么它在这种情况下有效?

let array = [{id:1, checked: false}, {id:2, checked:true}]
array.map(item => {
    item.checked = true
})

数组变为[{id:1, checked: true}, {id:2, checked:true}]

数组映射功能正常。 map() 方法创建一个新数组,其中包含对该数组中每个元素调用提供的函数的结果。 map() 不会改变调用它的数组。

var array = [true, false]



var new_array = array.map(function(item) {
  return false;
});

console.log(array)
console.log(new_array)

.map() 方法不可变,检查它的 return 值:

var arr2 = array.map(item => false)
console.log(arr2)

在函数式编程中,建议值不要经常变化,JavaScript借用了。至少 .map().reduce() 是这样。确保你很了解 .map()

如果你的映射很简单,你可以这样做:

var array = [true, false];
array = array.map(_ => false);

console.log(array);
// [false, false]

JavaScript 数组 map() 方法

*) 使用为每个数组元素调用一个函数的结果创建一个新数组,并按顺序为数组中的每个元素调用一次提供的函数。

注意:map()方法对没有值的数组元素不执行函数,不改变原数组。

more details