在JavaScript中复制关联数组
下面是一段代码,用于将一个关联数组复制到另一个关联数组在JavaScript中复制关联数组,javascript,associative-array,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();
<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>
var some_db=新数组();
一些_db[“一”]=“1”;
一些_db[“两个”]=“2”;
一些_db[“三”]=“3”;
var copy_db=新数组();
警报(一些_db[“一”]);
copy_db=some_db.slice();
警报(复制数据库[“一”]);
但第二个警告是“未定义”。。我做错什么了吗?请提供任何指针…正如@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
函数,该函数正是这样做的(将键从一个对象复制到另一个对象)。最显著和最重要的是。在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>
var some_db={
“一”:“一”,
“二”:“二”,
“三”:“三”
};
var copy_db=克隆(某些_db);
警报(一些_db[“一”]);
警报(复制数据库[“一”]);
功能克隆(obj){
如果(null==obj | |“object”!=typeof obj)返回obj;
var copy=obj.constructor();
for(obj中的var attr){
如果(obj.hasOwnProperty(attr))copy[attr]=clone(obj[attr]);
}
返回副本;
}
我通常会使用var copy\u db=$.extend({},some\u db)代码>如果我使用jQuery
防小提琴:
.可能会有所帮助。它执行字典对象或数组的浅层复制
var some_db = {
"One" : "1",
"Two" : "2",
"Three" : "3"
};
copy_db = _.clone(some_db);
如果要使用JSON,可以使用此“关联数组”对象:
var assArray = {zero:0, one:1, two:2, three:3, what:'ever', you:'want'};
然后像这样“克隆”它:
var clonedObj = JSON.parse(JSON.stringify(assArray));
javascript中没有关联数组。javascript数组不适用于非数字键。这就是为什么.slice
无法拾取它们的原因。改用普通对象,然后看一看。@Niko:数组从一开始就是对象。。。他们没有“转向”。@FelixKling谢谢,我错过了。更正了我的评论。@Peter-在问更多问题之前,你真的应该接受一些问题的答案。@FelixKling谢谢你。已修复。请注意,该函数不复制子函数-objects@iambriansreed不,没有。分配属性时,需要再次调用克隆函数。看看你更新的小提琴:这将执行一个深度复制:@maja-好的捕获。更新。