2012-04-22 80 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