我正在尝试在名为arr的2维数组中找到“ a”。如果存在“ a”,则使用if语句将其bol 2 diminsional数组设置为在其他数组arr中“ a”所在的相同位置。
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看起来像这样: 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]
请告诉我我在做什么错。谢谢!
答案 0 :(得分:2)
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);