6

在 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}]

4

4 回答 4

8

JavaScript 数组 map() 方法

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

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

更多细节

于 2017-02-15T07:02:24.993 回答
5

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

var array = [true, false]



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

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

于 2017-02-15T06:42:12.013 回答
3

如果您的映射很简单,您可以执行以下操作:

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

console.log(array);
// [false, false]
于 2017-02-15T06:44:30.477 回答
0

.map()方法是不可变的,查看它的返回值:

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

在函数式编程中,建议值不要经常更改,JavaScript 借鉴了它。至少对于.map()而且.reduce()这是真的。确保你很.map()清楚。

于 2017-02-15T06:42:37.937 回答