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);
}

結果は、同じオブジェクトへの 10 個の参照を含む配列です。

毎回新しいオブジェクト インスタンスを作成する必要があります。例:

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

結果は、10 個の個別のオブジェクトへの 10 個の参照を含む配列です。

于 2013-05-07T10:30:09.960 に答える