【问题标题】:JavaScript create use backup arrayJavaScript 创建使用备份数组
【发布时间】:2012-04-04 19:51:46
【问题描述】:

只要看看代码,你就会明白我的意思:

​var aBackup = [3, 4]; // backup array
​​var a = aBackup; // array to work with is set to backup array
a[0]--; // working with array..
a = aBackup; // array o work with will be rested
console.log(a);  // returns [2, 4] but should return [3, 4]
console.log(aBackup);​ // returns [2, 4] too​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​  but should return [3, 4] too

【问题讨论】:

  • Is there a method to clone an array in jQuery? 的可能重复项——尽管标题/问题中有 jQuery 一词,但解决方案与 jQuery 无关。
  • @FelixKling 抱歉,我没有看到这个副本。每个人都应该投票关闭。

标签: javascript arrays


【解决方案1】:

javascript 不使用数组指针吗? ​​var a = aBackup; 应该复制一份吗?否则结果对我来说似乎很正常......

【讨论】:

    【解决方案2】:

    数组是对象的引用类型,因此对其所做的更改将更改它指向的基础值,a 和 aBackup 将指向相同的值,对 a 所做的更改也会更改 aBackup。

    【讨论】:

      【解决方案3】:

      您需要制作数组的真实副本,而不仅仅是使用参考:

      var aBackup = [3, 4]; // backup array
      var a = aBackup.slice(0); // "clones" the current state of aBackup into a
      a[0]--; // working with array..
      a = aBackup.slice(0); // "clones" the current state of aBackup into a 
      console.log(a);  // returns [3, 4] 
      console.log(aBackup); // returns [3, 4]
      

      有关 slice 方法的文档,请参阅 MDN

      【讨论】:

        【解决方案4】:

        这是因为当你这样做时,你不是在复制数组,而是对原始数组的引用。

        var a IS aBackup; // if you will
        

        当你需要做的是克隆备份阵列。

        【讨论】:

          猜你喜欢
          • 2011-12-31
          • 1970-01-01
          • 2012-01-16
          • 1970-01-01
          • 2017-02-12
          • 2019-05-29
          • 1970-01-01
          • 2014-08-05
          • 1970-01-01
          相关资源
          最近更新 更多