8

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

<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

4 回答 4

18

在 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 copy_db = $.extend({}, some_db);如果我使用 jQuery,我通常会使用。

小提琴证明:http: //jsfiddle.net/RNF5T/

谢谢@maja

于 2012-04-22T18:23:54.463 回答
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。Underscore.js 也_.clone(obj)_.extend( {}, obj )

于 2012-04-22T18:21:23.290 回答
3

如果你想使用 JSON,你可以使用这个“关联数组”对象:

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

并像这样“克隆”它:

var clonedObj = JSON.parse(JSON.stringify(assArray));
于 2014-01-15T20:24:37.300 回答
0

underscore.clone可以提供帮助。它对字典对象或数组执行浅拷贝。

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

copy_db = _.clone(some_db);
于 2013-04-19T19:13:21.680 回答