2014-10-10 62 views
0

我需要複製和操作數組變量,但由於某種原因,當我將值推入新創建的數組時,它將數值推送到原始數組中。重複數組

function testing (point) { 
    var newArray = currentChain; 
    newArray.push(point); 
} 

在這種情況下,點將被添加到currentChain變量。 請注意,我無處設置currentChain等於newArray,腳本中沒有其他變量名爲newArray。爲什麼會這樣呢?

+0

Javascript(如Java和許多其他語言)使用[call-by-sharing](http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing)作爲對象,所以'newArray'和'currentChain'指向相同的數組對象 – Christoph 2014-10-10 16:44:44

回答

2

要解決此問題,您需要克隆您的陣列。例如,通過使用slice方法:

var newArray = currentChain.slice(); 

這是因爲你的newArray是指向currentChain陣列。

+0

謝謝!這工作。我沒有意識到這些使用的指針。 – CountingStacks 2014-10-10 16:38:41

1

因爲newArraycurrentChain共享相同的參考,所以更改一個也影響另一個。

使用newArray = []來避免這種情況,因爲您的數組命名是這樣的。

+0

「請注意,我沒有設置currentChain等於newArray」;-) – 2014-10-10 16:22:39

+0

@NickRussler lol – 2014-10-10 16:23:12