在javascript中复制关联数组?

时间:2012-04-22 18:15:27

标签: javascript associative-array

我有以下代码用于将一个关联数组复制到另一个,

<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>

但是第二个警报说“未定义”..我在这里做错了吗?请指点..

4 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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 )

答案 2 :(得分:2)

如果你想使用JSON,你可以使用这个'associative array'对象:

var assArray = {zero:0,one:1,two:2,three:3,what:'ever',you:'want'};

和'克隆'就像这样:

var clonedObj = JSON.parse(JSON.stringify(assArray));

答案 3 :(得分:0)

underscore.clone(http://underscorejs.org/#clone)可以提供帮助。它对字典对象或数组执行浅复制。

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

copy_db = _.clone(some_db);