0
나는 단순한 백업/실행 취소 기능을 만들고있어 백업에 넣을 어레이를 올바르게 복제하지 못했습니다. 나는 slice()
과 "딥 클론 (deep clone)"이라는 재귀 함수를 사용하여 시도했지만, 복제 된 배열은 최신 상태의 복사본으로 남아 있거나 배열의 모든 요소를 복제하지 않습니다.다차원 배열을 복제하는 방법은 무엇입니까?
저는 바벨을 사용하고 있습니다. 1 개 깊은 클론 (작동하지 않습니다)
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;
}
버전 2 slice()
이 (작동하지 않습니다)
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;
}
버전. 정수, 배열, 객체, 내가 잘못 뭐하는 거지
colors : (2) [5, 7]
config : {setting: "c64", sprite_x: 24, sprite_y: 21, colors: Array(16), zoom: 20, …}
같은 :
save_backup() {
this.backup.push(this.all.slice());
this.backup_position ++;
console.log(this.backup);
}
배열은 모든 종류의 데이터를 포함? 도움을 주셔서 감사합니다.
2D 배열에 스플 라이스를 '맵핑'한 다음 전체 배열을 스플 라이스 할 수 없습니까? – Carcigenicate
배열이 비어 있습니다. 대신 개체를 사용하고 싶을 수도 있습니다. –
'splice '가 아닌'slice'를 사용하여 복사하십시오. – Bergi