Как объяснить то, что массив arr1 так странно реагирует на замену элемента?
let arr1 = new Array(3);
arr1.fill(new Array(3).fill(false));
let arr2 = [];
for (let i = 0; i < 3; i++) {
arr2[i] = [];
for (let k = 0; k < 3; k++) {
arr2[i][k] = false;
}
}
arr1[1][1] = true;
arr2[1][1] = true;
console.log(arr1,arr2);
Второй массив состоит из девяти независимых элементов. Первый массив состоит из трех копий одного массива. Изменение любого элемента ведет к изменениях других двух копиях.
Нажмите на кнопку "Выполнить код" в вопросе. Увидите, что первый массив выглядит так:
[
[
/**id:2**/
false,
true,
false
],
/**ref:2**/,
/**ref:2**/
]
Один массив и две ссылки на него.
Один из способов пофиксить.
let arr1 = new Array(3);
arr1 = arr1.fill(() => new Array(3).fill(false)).map(m => m());
let arr2 = [];
for (let i = 0; i < 3; i++) {
arr2[i] = [];
for (let k = 0; k < 3; k++) {
arr2[i][k] = false;
}
}
arr1[1][1] = true;
arr2[1][1] = true;
console.log(arr1, arr2);
Массивы и объекты в JavaScript передаются по ссылке, в отличие от примитивов. Это значит, что работая с объектом, и присваивая значение одной переменной другой, вы копируете не значение ("такой же объект"), а ссылку ("этот же объект"). Что приводит к такому поведению:
{} !== {} // Это, хоть и одинаковые объекты, но не "один и тот же"
let object = {
foo: "bar"
};
let newObject = object; // Мы создаем новую ссылку на тот же объект
newObject.foo = "baz";
object.foo === "baz";
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Возникла следующая ситуация, мне необходимо выполнить операцию редактирования полей в таблицеДелаю я это следующим образом:
Как при нажатии Enter не получить лишние теги? Как у соцсети В контакте если не введено не чего то поле ввода остается пустым сообщение не добавляется!!!...