【问题标题】:using splice(0) to duplicate arrays使用 splice(0) 复制数组
【发布时间】:2012-08-22 12:26:30
【问题描述】:

我有两个数组:ArrayA 和 ArrayB。我需要将 ArrayA 复制到 ArrayB 中(而不是创建引用)并且我一直在使用 .splice(0) 但我注意到它似乎从初始数组中删除了元素。

在控制台中,当我运行这段代码时:

var ArrayA = [];
var ArrayB = [];

ArrayA.push(1);
ArrayA.push(2);

ArrayB = ArrayA.splice(0);

alert(ArrayA.length);

警报显示 0.splice(0) 我做错了什么??

感谢您的洞察力。

【问题讨论】:

  • .splice().slice() 之间有区别...
  • @sp00m:我喜欢 PascalNotation;我只是觉得它看起来更好。
  • @frenchie 我说的是约定。 PascaleNotation 为类保留,而 lowerCamelCase 用于方法/函数和变量/属性/属性。
  • @sp00m:我知道约定,但我确实更喜欢 PascalNotation 的外观。

标签: javascript


【解决方案1】:

您想使用slice() (MDN docu) 而不是splice() (MDN docu)!

ArrayB = ArrayA.slice(0);

slice() 保持原始数组不变,只创建一个副本。

另一方面,splice() 只是通过插入或删除元素来修改原始数组。

【讨论】:

    【解决方案2】:

    splice(0)0 开始抓取所有项目(即直到最后一个,即所有项目),从原始数组中删除它们并返回它们。

    【讨论】:

      【解决方案3】:

      您正在寻找slice:

      var a = [1,2,3,4,5]
         ,b = a.slice();
      //=> a = [1,2,3,4,5], b = [1,2,3,4,5]
      

      你可以使用splice,但它会破坏你原来的数组:

      var a = [1,2,3,4,5]
         ,b = a.splice(0);
      //=> a = [], b = [1,2,3,4,5]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 2016-02-09
        • 1970-01-01
        相关资源
        最近更新 更多