【问题标题】:Javascript variable fix last value after changesJavascript变量修复更改后的最后一个值
【发布时间】:2017-03-20 07:26:27
【问题描述】:

这是我的训练:

    var fruits = ["Banana", "Orange", "Apple", "Mango"];
    document.getElementById("demo").innerHTML = fruits;
    
    function myFunction() {
        var fruits2 = fruits;
        fruits2.reverse();
        document.getElementById("demo").innerHTML = fruits+'<br>'+fruits2;
    }
<p>Click the button to reverse only last array (fruits2).</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

当我反转fruits2 我的第一个变量(水果)也会改变,

我只是不想这样! 我想一定很容易

【问题讨论】:

    标签: javascript arrays syntax var array-reverse


    【解决方案1】:

    fruits2 = fruits 表示 fruits2 现在是同一个对象 - 不是 fruits 的副本,而是与 fruits 相同的对象。

    这就像给你的朋友哈利一个昵称,比如疯狗。当你打疯狗时,哈利也会生气。他们不是两个不同的人,他们是一个有两种称呼他的人。

    如果您想将它们分开,您需要克隆您的阵列。最简单的复制数组是使用slice

     var fruits2 = fruits.slice()
    

    【讨论】:

      【解决方案2】:

      那是因为你的 fruitsfruits2 是同一个数组。当您反转一个时,第二个也会反转。

      您需要制作另一个阵列副本。一种简单的方法是

      var fruits2 = JSON.parse(JSON.stringify(fruits));
      

      或者

      var fruits2 = fruits.slice()
      

          var fruits = ["Banana", "Orange", "Apple", "Mango"];
          document.getElementById("demo").innerHTML = fruits;
          
          function myFunction() {
              var fruits2 = fruits.slice()
              fruits2.reverse();
              document.getElementById("demo").innerHTML = fruits+'<br>'+fruits2;
          }
      <p>Click the button to reverse only last array (fruits2).</p>
      
      <button onclick="myFunction()">Try it</button>
      
      <p id="demo"></p>

      【讨论】:

      • 请注意,JSON.parse(JSON.stringify(...)) 技巧仅在数组完全可可逆序列化时才有效。与slice相比,使用它没有任何优势。
      • 我同意这一点,这只是我在需要时使用的一种方式。我从来不觉得它有优势。 OP 的想法是以某种方式复制数组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      相关资源
      最近更新 更多