0

我有一个关于将对象放在数组上的问题。我这样做是为了记录活动的历史,所以我通过将每个对象推入数组中来存储它。但是当我推送它时,以前的对象数据会用当前更新。不知道问题出在哪里?我真的需要这方面的帮助。谢谢你。

我试图通过这个克隆对象:

function deepCopy(obj) {
if (Object.prototype.toString.call(obj) === '[object Array]') {
        var out = [], i = 0, len = obj.length;
        for ( ; i < len; i++ ) {
            out[i] = arguments.callee(obj[i]);
        }
        return out;
    }
    if (typeof obj === 'object') {
        var out = {}, i;
        for ( i in obj ) {
            out[i] = arguments.callee(obj[i]);
        }
        return out;
    }
    return obj;
}

但在这里仍然没有运气。:(

4

1 回答 1

2

问题很可能是您一遍又一遍地推动同一个对象。例子:

var obj = {};
var arr = [];
for (var i = 0; i < 10; i++) {
  obj.index = i;
  arr.push(obj);
}

结果是一个包含十个对同一对象的引用的数组。

您必须每次都创建一个新的对象实例。例子:

var arr = [];
for (var i = 0; i < 10; i++) {
  var obj = {};
  obj.index = i;
  arr.push(obj);
}

结果是一个包含十个对十个单独对象的引用的数组。

于 2013-05-07T10:30:09.960 回答