【问题标题】:Array map function doesn't change elements数组映射函数不改变元素
【发布时间】:2017-07-03 16:38:39
【问题描述】:

在 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 函数不会改变原始数组,它会返回另一个您应该使用的数组。

标签: javascript arrays array.prototype.map


【解决方案1】:

JavaScript Array map() 方法

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

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

more details

【讨论】:

    【解决方案2】:

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

    var array = [true, false]
    
    
    
    var new_array = array.map(function(item) {
      return false;
    });
    
    console.log(array)
    console.log(new_array)

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 当您实际上不打算将变量用于任何事情时,有时会使用下划线作为变量名。这纯粹是一种风格。
      【解决方案4】:

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

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

      在函数式编程中,建议值不要经常变化,JavaScript 借鉴了它。至少对于 .map().reduce() 这是真的。确保你知道.map()

      【讨论】:

        猜你喜欢
        • 2020-12-24
        • 2022-10-06
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 2021-08-19
        • 2010-12-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多