При замене определенного элемента в многомерном массиве, заменяются в каждой строке.
Здравствуйте!
Новичок. Делаю карту для игры через многомерный массив, следующим образом: 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, время: 20:04. |