24

我有两个数组: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)??

感谢您的洞察力。

4

3 回答 3

49

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

ArrayB = ArrayA.slice(0);

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

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

于 2012-08-22T12:28:54.930 回答
5

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

于 2012-08-22T12:30:18.180 回答
4

您正在寻找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]
于 2012-08-22T12:32:09.157 回答