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, …}
我在做什麼錯? 非常感謝您的幫助。
難道你不能只在二維數組上映射拼接,然後拼接整個數組? – Carcigenicate
該數組爲空。您可能想改爲使用對象。 –
使用'切片'來複制,而不是'拼接' – Bergi