Javascript:使用嵌套的for循环和二维数组时,for循环中的增量数组元素

时间:2019-10-24 20:17:32

标签: javascript arrays for-loop multidimensional-array nested-loops

我有一个看起来像这样的数组:

matrix = [[0,1,1,2], [0,5,0,0], [2,0,3,3]]

我想遍历此嵌套数组,并将每个数组中的元素与其他数组中的对应元素进行比较,即将第二个数组中的5(第1个元素)与1(第1个元素)进行比较),第一个数组中的0(第一个元素)。我想检查我正在查看的当前数组中的元素在其他数组之一中是否具有等于0的对应项。

所以基本上我想将[0] [0]与[1] [0]和[2] [0],[0] [1]与[2] [1]和[3] [1]进行比较等等,在嵌套的for循环中。

这是我尝试过的:

function matrixElementsSum(matrix) {
    let total = 0;
    let arr = [];

    for(let i = 0; i < matrix.length; i++) {
        for(let j = 0; j < matrix[i].length; j++) {
            if(matrix[i][j] != 0 && matrix[i + 1][j] != 0) {
                console.log(matrix[i][j]);
            }
        }
    }  
}

if语句的这一部分导致undefined错误: && matrix[i + 1][j] != 0

在常规数组/ for循环中,我们可以递增i以将当前元素与下一个元素进行比较。使用数组数组时,如何在嵌套的for循环中执行此操作?

2 个答案:

答案 0 :(得分:0)

如果子数组的长度相同,则只需要遍历第一个子数组的元素并将其与对应的子数组进行比较,如果我理解正确,我认为这将为您做到这一点:

var matrix =  [[0,1,1,2], [0,5,0,0], [2,0,3,3]]
var len = matrix[0].length
var flatArray = matrix.flat()
for(let index=0;index<len;index++){
if(flatArray[index] !== 0 && flatArray[index + len] !== 0 && flatArray[index 
+ 2*len] !== 0)
console.log(index,flatArray[index])
}

答案 1 :(得分:0)

您可以使用the ES6 iteration protocol而不是嵌套循环,并从内部数组中获取所有迭代器,然后使用其输出直到完成。这样可以简化处理数据的方式,因为每次迭代都只有每个数组中的当前顺序项:

function compareAll(matrix) {
  //get all the iterators for sub-arrays
  const iterators = matrix.map(sub => sub[Symbol.iterator]());

  while(true) {
    //advance all iterators and take theur results
    let res = iterators.map(it => it.next());
    
    //terminate if any is done
    if (res.some(r => r.done)) break;
    
    //get the values
    let currentValues = res.map(({value}) => value);

    //do something with them
    const allEqual = currentValues.every(function(value) {
      return value === this;
    }, currentValues[0]);
    console.log(currentValues, allEqual);
  }
}


compareAll([[0, 1, 1, 2], [0, 5, 0, 0], [2, 0, 3, 3]]);