我有以下代码用于将一个关联数组复制到另一个,
<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>
但是第二个警报说“未定义”..我在这里做错了吗?请指点..
答案 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
函数,它正是这样做的(将密钥从一个对象复制到另一个对象)。最值得注意的是jQuery和underscore.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);