如何按列比较多维数组

时间:2019-04-01 19:29:06

标签: javascript for-loop multidimensional-array

我正在创建一个函数来比较长度为6的多维数组中的项目。我从下至上,从左至右进行比较。如果前几个元素(索引0)如下i[0][5] > i[0][4] > i[0][3] > i[0][2] > i[0][1] > i[0][0],则返回false;如果至少有一个不遵守上述规则的元素,则应返回false。

当我尝试使用for循环时,程序仅返回1个结果,而不是所有预期结果。

let multidimArr = [
[1, 2, 3, 2, 1, 1]
[2, 4, 4, 3, 2, 2]
[5, 5, 5, 5, 4, 4]
[6, 6, 7, 6, 5, 5]
[4, 7, 6, 8, 7, 6]
[4, 9, 6, 7, 8, 9]
];

function compare() {

for (var i=0, len=multidimArr.length; i<len; i++) {

    for (var j=0, len2=multidimArr[i].length; j<len2; j++) {
      if( i <= 0 ) continue;

        if ( multidimArr[i][j] < multidimArr[i - 1][j] ) {
          return false
           );


      } else if( multidimArr[i][j] > multidimArr[i - 1][j] ){
         return true; 

      }
}

console.log('the status is [' + compare() + ']');

对于此代码,第一列的预期结果为false,第二列为true,第三列为false,第四列为true,第五列为false,最后列为true

不幸的是,它只会返回false。

1 个答案:

答案 0 :(得分:1)

您可以缩小数组,并在第一行使用true,然后检查最后一个和实际值并遵守最后一个检查。

function check(array) {
    return array.reduce((r, a, i, { [i - 1]: b }) => a.map((v, j) => i
            ? r[j] && b[j] < v
            : true
    ), []);
}


var array = [[1, 2, 3, 2, 1, 1], [2, 4, 4, 3, 2, 2], [5, 5, 5, 5, 4, 4], [6, 6, 7, 6, 5, 5], [4, 7, 6, 8, 7, 6], [4, 9, 6, 7, 8, 9]];

console.log(check(array));