访问多维数组中的项目

时间:2019-05-25 10:59:03

标签: javascript reactjs multidimensional-array

我正在构建一个Connect 4应用程序。在检查draw(tie)的条件时,我无法遍历使用Fill Function(7 x 6)数组构建的数组。

    state = {
    columnGrid: new Array(7)
          .fill(0)
          .map(() => new Array(6).fill(null)),
     }      
    const test = this.state.columnGrid.slice();

console.log(测试)的结果:

    (7) [Array(6), Array(6), Array(6), Array(6), Array(6), Array(6), 
    Array(6)]
    0: (6) [null, null, null, null, null, null]
    1: (6) [null, null, null, null, null, null]
    2: (6) [null, null, null, null, null, null]
    3: (6) [null, null, null, null, null, null]
    4: (6) [null, null, null, null, null, null]
    5: (6) [null, null, null, null, null, null]
    6: (6) ["/static/media/golden.d6314cc9.png", null, null, null, null, 
    null]

我需要遍历所有数组并检查条件是否为array!== null

2 个答案:

答案 0 :(得分:1)

您可以使用双重过滤器。像这样:

const test = [
 [null, null, null, null, null, null],
 [null, null, null, null, null, null],
 [null, null, null, null, null, null],
 [null, null, null, null, null, null],
 [null, null, null, null, null, null],
 [null, null, null, null, null, null],
 ["/static/media/golden.d6314cc9.png", null, null, null, null,null]
]
.filter(t => 
  t.filter(tt => tt != null).length > 0);
console.log(test);

  

我只想通过放置一个   条件这些数组不为空,例如,如果(每个数组都不为空)   {然后是平局},因此只想检查其中的每个元素   数组是否为空

在这种情况下:

const testArray = [
     [null, null, null, null, null, null],
     [null, null, null, null, null, null],
     [null, null, null, null, null, null],
     [null, null, null, null, null, null],
     [null, null, null, null, null, null],
     [null, null, null, null, null, null],
     ["/static/media/golden.d6314cc9.png", null, null, null, null,null]
];
const allSubArraysContainAtLeastOneValue = 
    testArray.filter(t => 
      t.filter(tt => tt != null).length)
    .length === testArray.length;

console.log(
  `Did every subarray of testArray contain at least one value? ${
    allSubArraysContainAtLeastOneValue
      ? "yes :D" 
      : "nope :("}`);

答案 1 :(得分:1)

以下内容将为您为每行提供一个布尔值,该布尔值将指示该行是否为空,即对于至少具有一个非空值的行为true:

var columnGrid = new Array(7)
    .fill(0)
    .map(() => new Array(6).fill(null));

columnGrid[6][0] = "test";

var isnull = columnGrid.map(row => row.some(Boolean));

console.log(isnull); 

Boolean回调实际上将查找“真实”的值,因此非空字符串将符合条件。但是,如果您的数组仅包含0或空字符串,则将不符合非null数组的条件。如果您希望更改,则不要传递Boolean,而是将a => a !=== null作为对some的回调。但是,如果您的实际情况是值是null或非空字符串,则上面的代码可以解决问题。