При замене определенного элемента в многомерном массиве, заменяются в каждой строке.
Здравствуйте!
Новичок. Делаю карту для игры через многомерный массив, следующим образом:
class GameMap {
constructor() {
this.data = this.createMap();
this.data[2][2] = 1; //****
// 0 - empty
// 1 - box
}
createMap() {
var arr = [];
for (let i=0; i<10; i++){
arr.push(0);
}
var arr10x10 = [];
for (let i=0; i<10; i++){
arr10x10.push(arr);
}
return arr10x10;
}
save(){
localStorage.setItem('gamemap', JSON.stringify(this));
}
load(){
var gamemap = JSON.parse(localStorage.getItem('gamemap'));
this.data = gamemap.data;
}
show(){
var map = document.getElementById('map');
map.style.width = "500px";
map.style.height = "500px";
for (let i=0; i<this.data.length; i++){
for (let y=0; y<this.data.length; y++){
var cols = document.createElement('div');
var rows = document.createElement('div');
cols.className=`d-${this.data[i][y]}`;
cols.style.width = "50px"
cols.style.height = "50px"
cols.style.border = "1px solid black"
rows.style.border = "1px solid black"
map.appendChild(cols);
map.appendChild(rows);
}
}
}
}
Проблема в следующей строке this.data[2][2] = 1; //**** Она не заменяет нужный элемент. 1 добавляется во втором элементе каждой строки: http://take.ms/OJNiU Не могу понять почему. Помогите, пожалуйста |
RoyalHunt,
строка 11 массив создан только один раз для всех либо берите копию arr10x10.push(arr.slice(0)); , либо создавайте столько раз сколько нужно перенести строки 11 - 14 в 17 |
Цитата:
|
RoyalHunt,
вариант
class GameMap {
constructor() {
this.data = this.createMap();
this.data[2][2] = 1; //****
// 0 - empty
// 1 - box
}
createMap() {
var arr = [];
for (let i=0; i<10; i++){
arr[i] = [];
for (let j=0; j<10; j++){
arr[i][j] = 0;
}
}
return arr;
}
save(){
alert(JSON.stringify(this));
}
}
var test = new GameMap;
test.save();
|
Цитата:
Вначале пробовал таким образом создать массив: let array = new Array(arraySize).fill(new Array(arraySize).fill(number)); Но та же ситуация получается... |
| Часовой пояс GMT +3, время: 12:48. |