【问题标题】:Array.prototype.map, and the difference between these two examplesArray.prototype.map,以及这两个例子的区别
【发布时间】:2020-07-02 02:13:31
【问题描述】:

以下代码中对 Array.prototype.map 的两次调用都返回数组 [2, 4, 6]。解释两行代码之间的细微差别。哪一个是首选,为什么?

[1, 2, 3].map(n => n *= 2);

[1, 2, 3].map(n => n * 2);

我试图将一个视为重新分配,另一个视为突变

【问题讨论】:

  • 第一个改变了n参数,但是由于回调的范围在那里结束,更新的变量丢失了,所以更新没有意义。
  • 你基本上是在问*= 做了什么。这实际上并不特定于 .map()

标签: javascript arrays


【解决方案1】:

对于您的第一种情况,您正在重新分配 n,但由于 n 已被丢弃,因此该副作用并不真正可见。

【讨论】:

    【解决方案2】:

    第一行可以写成如下。所以你只是重新分配 n

    console.log([1, 2, 3].map(n => n = n*2));// Like this just reassigning n with n*2 after every iteration
    
    console.log([1, 2, 3].map(n => n * 2));
    

    【讨论】:

      【解决方案3】:

      应该没有区别。 两者给出相同结果的原因是.map() 总是返回一个填充了给定函数结果的新数组;这里需要注意的是,赋值运算符的结果就是赋值本身,事实上,如果你运行

      let x = 5;
      console.log(x = 4);
      

      你得到 4 作为输出。

      通过遵循这种行为:

      • n => n * 2 - 将n * 2 的结果放入对应的数组单元格中
      • n => n *= 2 - 将n *= 2的结果放入对应的数组单元格中,结果正好是n * 2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-13
        • 2013-04-10
        • 2019-09-12
        • 2013-02-23
        • 1970-01-01
        相关资源
        最近更新 更多