使用if语句和2维数组javascript嵌套for循环

时间:2018-10-12 21:48:34

标签: javascript for-loop if-statement multidimensional-array

我正在尝试在名为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]

请告诉我我在做什么错。谢谢!

1 个答案:

答案 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);