2011-10-30 56 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也會改變。

你應該搜索「如何克隆一個對象」,這可能對你有幫助。