2013-04-15 78 views
1

對不起,非常基本的問題,我是新的。傳遞一個JS陣列到一個新的陣列

如果我有一個數組並將其傳遞給一個新變量(newArray = oldArray),那麼從newArray中移除一個元素,它似乎也會影響oldArray。

我的猜測是,它只是創建一個新的引用到同一個變量,所以存儲在oldArray中的數據現在有兩個標識符?

如果是的話,我怎麼實際上將oldArray中的元素傳遞給newArray,使newArray與oldArray是獨立的?

在此先感謝

+0

也許答案是一樣的...但我做了搜索,沒有找到答案。這是因爲我沒有意識到價值傳遞和參照傳遞之間是有區別的,因爲我確信很多像我這樣的新手都不會意識到,讓我的問題可以在我們的新搜索中找到:P – jsnewb

回答

1

我的猜測是,它只是創造一個新的參考同一個變量,所以被存儲的數據在oldArray中現在有兩個標識符?

權,無論是新的變量,你的舊都指向同一陣列。通過一個引用(變量)對數組進行操作通過另一個引用自然可見,因爲只有一個數組。

爲了避免這種情況,您必須製作一個副本的數組。有幾種方法可以做到其中之一即是使用slice

var newArray = oldArray.slice(0); 

slice開始返回給定索引處的數組的淺表副本。如果您給它索引0,它會複製整個陣列。

+1

非常感謝你:) – jsnewb

0

的最快方法是使用數組函數返回一個新的數組實例。通常情況下,我使用:

var newArray = oldArray.slice(0); 
+0

非常感謝很多人,我無法相信答案有多快。令人驚歎的網站:) – jsnewb

0

在這種情況下,你必須使用切片的方法克隆數組:

newArray = oldArray.slice(0); 
0

當你學會了,當你複製一個數組變量,你複製一個參考到原來的。

這裏有一個IDOM做一個真正的副本 - 從第一個元素請求slice

var newArray = oldArray.slice(0);