Я пытаюсь найти "a" в своем 2-мя матрице, называемом arr. Используя оператор if, если есть "a", он должен установить мой размерный массив div 2 равным true в том же месте, где "a" находится в моем другом массиве arr.
var x;
var y;
var arr = [
["a", "b", "c"],
["d", "e", "a"],
["1", "2", "3"],
["a", "f", "d"]
];
var bol = new Array(4).fill(new Array(3).fill(false));
for (x = 0; x <= 3; x++) {
for (y = 0; y <= 2; y++) {
if (arr[x][y] == "a") {
bol[x][y] = true;
}
}
}
console.log(bol);
Я ожидаю, что это будет выглядеть так: bol
[[true, false, false],
[false, false, true],
[false, false, false],
[true, false, false]];
Однако в консоли bol выглядит так:
[true, false, true]
[true, false, true]
[true, false, true]
[true, false, true]
Пожалуйста, скажите мне, что я делаю неправильно. Спасибо!
В то время как Array#fill
заполняет массив одним и тем же объектом/примитивом, вам необходимо создать независимые массивы.
Например, с Array.from
и вторым параметром для функции сопоставления, которая является другим методом Array.from
.
var x,
y;
arr = [["a", "b", "c"], ["d", "e", "a"], ["1", "2", "3"], ["a", "f", "d"]],
bol = Array.from({ length: 4 }, _ => Array.from({ length: 3}, _ => false));
for (x = 0; x <= 3; x++) {
for (y = 0; y <= 2; y++) {
if (arr[x][y] == "a") {
bol[x][y] = true;
}
}
}
console.log(bol);
Или сопоставьте данный массив и их вспомогательные массивы с требуемой проверкой.
var array = [["a", "b", "c"], ["d", "e", "a"], ["1", "2", "3"], ["a", "f", "d"]],
bol = array.map(a => a.map(v => v === 'a'));
console.log(bol);
fill
заполняет ту же ссылку на объект, если не примитив.