2011-10-30 101 views
0

我不知道什么不对的JavaScript的剪接 - 奇怪的问题

$(function() { 
var arr1=new Array('A','B','C','D','E','F','G'); 
var arr2=new Array('F','D','B'); 
var arr3=arr1; 
    for(x=0; x<arr3.length; x++) { 
     if(jQuery.inArray(arr3[x],arr2) == -1) {arr3.splice(x, 1);} 

    } 
    alert(arr1.join(',')); 
    alert(arr3.join(',')); 
}); 

我想ARR1应该还是阵列( 'A', 'B', 'C', 'd', 'E',” F','G'),但在此操作之后,arr1变为arr3。由于整个操作完全不触碰arr1,所以对我来说没有意义。

发布此信息后找到了答案。见duplicating arrays javascript splicing

回答

0

var arr3=arr1;这样的分配是通过引用完成的,即arr3变量现在指向arr1变量指向的相同位置。带下划线的数据(在这种情况下是数组)是相同的。基本上arr1和arr3是一样的。因此,通过其中一项完成的任何更改都可以通如果你想复制的简单类型的数组使用slice(0)

var arr3 = arr1.slice(0); 
0
var x = [3, 4, 5] 
var y = [3, 4, 5] 
var z = y 

x === y // false 
y === z // true (y and z reference the same object) 

y.push(6) 
y // [3, 4, 5, 6] 
z // [3, 4, 5, 6] 

var x2 = x.slice(0) 
x2 === x // false 
x2.push('foo') 
x2 // [3, 4, 5, 'foo'] 
x // [3, 4, 5] 

使用Array.prototype.slice副本的数组。

0

arr1是一个数组对象。当您复制arr1(如var arr3 = arr1)时,我们只需获取对原始对象的新参考。 所以,当你改变arr3时,arr1也会改变。

你应该搜索“如何克隆一个对象”,这可能对你有帮助。