Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中复制关联数组_Javascript_Associative Array - Fatal编程技术网

在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-好的捕获。更新。