Как сравнить многомерный массив по столбцам - PullRequest
2 голосов
/ 01 апреля 2019

Я создаю функцию для сравнения элементов в многомерном массиве длины 6. Я сравниваю снизу вверх и слева направо.Если первые элементы (индекс 0) имеют следующий вид i[0][5] > i[0][4] > i[0][3] > i[0][2] > i[0][1] > i[0][0], он возвращает false, и если существует только хотя бы один элемент, который не соответствует приведенному выше правилу, он должен вернуть false.

Когда я пытаюсь использовать дляВ цикле программа возвращает только 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 для 3-го, true для4-е, false для 5-го и true для последнего столбца .

К сожалению, возвращается только false.

1 Ответ

1 голос
/ 02 апреля 2019

Вы можете уменьшить массив и взять 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));
...