2012-04-22 57 views
7

我爲複製一個關聯數組到其他下面的一段代碼,在javascript中複製關聯數組?

<script> 

var some_db = new Array(); 

some_db["One"] = "1"; 

some_db["Two"] = "2"; 

some_db["Three"] = "3"; 

var copy_db = new Array(); 

alert(some_db["One"]); 

copy_db = some_db.slice(); 

alert(copy_db["One"]); 


</script> 

但第二警報說,「未定義」 ..我在這裏做得不對嗎?任何指針請..

+5

JavaScript中沒有關聯數組。 – Niko 2012-04-22 18:16:36

+6

JavaScript數組不適用於非數字鍵。這就是爲什麼'.slice'不能接收它們。使用一個普通的對象,然後看看[克隆JavaScript對象的最有效方法是什麼?](http://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-克隆-A-JavaScript的對象)。 – 2012-04-22 18:17:39

+1

@Niko:數組是從一開始就是對象......他們沒有被「轉向」。 – 2012-04-22 18:19:06

回答

17

在JavaScript中,關聯數組稱爲對象。

<script> 

var some_db = {   
    "One" : "1",  
    "Two" : "2",  
    "Three" : "3"  
}; 

var copy_db = clone(some_db); 

alert(some_db["One"]); 

alert(copy_db["One"]);  

function clone(obj) { 
    if (null == obj || "object" != typeof obj) return obj; 
    var copy = obj.constructor(); 
    for (var attr in obj) { 
     if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); 
    } 
    return copy; 
} 

</script> 

如果我使用的是jQuery,我通常會使用var copy_db = $.extend({}, some_db);

小提琴證明:http://jsfiddle.net/RNF5T/

感謝@maja。

+2

這不是創建副本... – 2012-04-22 18:25:11

+0

@FelixKling謝謝你。固定。 – iambriansreed 2012-04-22 18:27:19

+0

請注意,該函數不會複製子對象 – maja 2013-12-02 14:46:34

4

由於@Niko在評論中說,JavaScript中沒有關聯數組。

你實際上是在數組對象上設置屬性,這不是一個好主意。你最好使用實際的物體。

var some_db = {}; 
some_db["One"] = "1"; 
some_db["Two"] = "2"; 
some_db["Three"] = "3"; 

var copy_db = {}, prop; 
// loop over all the keys in the object 
for (prop in some_db) { 
    // make sure the object has this value, and not its prototype 
    if (some_db.hasOwnProperty(prop)) { 
    copy_db[ prop ] = some_db[ prop ]; 
    } 
} 

許多圖書館實施extend函數正是這樣做的(複印鍵從一個對象到另一個對象)。最值得注意的是jQueryunderscore.js。下劃線也有_.clone(obj)這是有效_.extend({}, obj)

0

underscore.clone(http://underscorejs.org/#clone)可以提供幫助。它執行字典對象或數組的淺拷貝。

var some_db = {   
    "One" : "1",  
    "Two" : "2",  
    "Three" : "3"  
}; 

copy_db = _.clone(some_db); 
2

如果你想使用JSON,可以採取這種 '關聯數組' 對象:

變種assArray = {零:0,一個:1,2:2,3:3,什麼: '永遠',你: '想'};

和 '克隆' 這樣的:

變種clonedObj = JSON.parse(JSON.stringify(assArray));

+1

heh,屁股陣列... – Ogen 2017-01-05 05:10:24