Я создаю небольшую игру для школы и создаю доску из 100 плиток, которые являются JS объектами. Некоторые из этих плиток блокируются (это одно из их свойств) случайным образом. Игрок не может go в нем.
Мне нужно положить 4 оружия на эти плитки, тоже случайно.
Итак, я создал массив плиток без блокировки, а затем я положил мое оружие одно за другим на этих бесплатных плитках. Чтобы убедиться, что на одной из этих плиток уже нет оружия, я использую .filter (), чтобы создать новый массив плиток, разблокированных и пустых (без оружия).
Дело в том, что когда Я обновляю свойство плитки в моем новом массиве (выпущенном из .filter, чтобы быть уверенным, что в одном месте не будет двух видов оружия), он обновляет свойства плитки в родительском массиве, и я не Я не понимаю этого. Я читал, что метод .filter () не обновляет родительский массив, но здесь это делает? Может быть, это потому, что это JS объект?
Спасибо за разъяснения!
let tilesUnblocked = []
//here function creating tiles and pushing unblocked tiles in the array above
for (i = 0; i < weapons.length; i++) {
let tilesUnblockedAndEmpty = tilesUnblocked.filter(tile => tile.weapon === false)
let randomInt = Math.round(tilesUnblockedAndEmpty.length * Math.random())
let weaponElt = weapons[i].HTMLElement
weaponElt.css({ //some css })
tilesUnblockedAndEmpty[randomInt].HTMLElement.append(weaponElt)
tilesUnblockedAndEmpty[randomInt].weapon = true //updating array created from filter
tilesUnblockedAndEmpty[randomInt].weaponType = weapons[i].name //updating array created from filter
}
console.log(tilesUnblocked) //I will find in this array the objects updated at the end of the foor loop, on the array issued of .filter method !