0
私は単純なバックアップ/元に戻す機能を構築しており、バックアップに入れるためにアレイを正しくクローン化できません。私はslice()
と "ディープクローン"への再帰的な関数を使用しようとしましたが、クローンされた配列は最新の状態のコピーのままであるか、配列のすべての要素をクローンしません。多次元配列を複製する方法は?
私はバベルを使用しています。
constructor(config) {
this.all = [];
this.all.colors = [5,7];
this.all.sprites = [];
this.all.current_sprite = 0;
this.all.width = config.sprite_x;
this.all.height = config.sprite_y;
this.backup = [];
this.backup_position = 0;
}
バージョン1深いクローン(動作しない)
save_backup() {
this.backup.push(this.deepClone(this.all));
this.backup_position ++;
console.log(this.backup);
}
deepClone(arr) {
var len = arr.length;
var newArr = new Array(len);
for (var i=0; i<len; i++) {
if (Array.isArray(arr[i])) {
newArr[i] = deepClone(arr[i]);
} else {
newArr[i] = arr[i];
}
}
return newArr;
}
バージョン2 slice()
(動作しません)。
save_backup() {
this.backup.push(this.all.slice());
this.backup_position ++;
console.log(this.backup);
}
配列は、すべての種類のデータが含まれます
colors : (2) [5, 7]
config : {setting: "c64", sprite_x: 24, sprite_y: 21, colors: Array(16), zoom: 20, …}
のような整数、配列、オブジェクト、私は間違って何をやっているの? ありがとうございました。
2次元配列上にスプライスをマップするだけでは、配列全体をスプライスすることはできませんか? – Carcigenicate
配列が空です。代わりにオブジェクトを使用したいかもしれません。 –
'splice'ではなく' slice'を使ってコピーします。 – Bergi