我有两个数组:
var array1 = [1, 2, 3];
var array2 = [4, 5, 6];
我希望数组1完全等于数组2.我被告知我不能简单地做:
array1 = array2;
如果我不能这样做,我怎样才能使array1等于array2?
由于
答案 0 :(得分:14)
如果你只需要一个数组元素的副本,你可以简单地使用这样的切片:
a = [1,2,3]
copyArray = a.slice(0)
[1 , 2 , 3]
至于为什么你不应该在这里使用assignement看看这个例子:
a = [1,2,3]
b = a
a.push(99)
a
[1,2,3,99]
b
[1,2,3,99]
如果您复制数组,则不会出现此问题:
a = [1,2,3]
b = a.slice(0)
a.push(888)
a
[1,2,3,888]
b
[1,2,3]
答案 1 :(得分:1)
要获得数组的深层副本,请执行此操作(REFERENCE):
function deepCopy(obj) {
if (Object.prototype.toString.call(obj) === '[object Array]') {
var out = [], i = 0, len = obj.length;
for ( ; i < len; i++ ) {
out[i] = arguments.callee(obj[i]);
}
return out;
}
if (typeof obj === 'object') {
var out = {}, i;
for ( i in obj ) {
out[i] = arguments.callee(obj[i]);
}
return out;
}
return obj;
}
答案 2 :(得分:0)
这样可以解决问题:
var clone = originalArray.slice(0);