Verificar matriz no JS - a lista é classificada?

Eu preciso criar um programa que verifica a lista na matriz é classificada. Eu tenho três dados de entrada:

1,2,3,4,5

1,2,8,9,9

1,2,2,3,2

Então aqui está o meu código:

let sorts = +gets();//3
let list = [];

for (let i = 0; i < sorts; i++) {
    list[i] = gets().split(',').map(Number);//The Array will be: [ [ 1, 2, 3, 4, 5 ], [ 1, 2, 8, 9, 9 ], [ 1, 2, 2, 3, 2 ] ]
}

for (let i = 0; i < list[i][i].length; i++){
    if (list[i][i] < list[i][i +1]) {
        print('verdade');
    } else {
        print('falso');
    }
}

Eu preciso imprimir para todas as listas na nova linha verdadeira ou falsa. Para este exemplo, minha saída precisa ser:

verdade

verdade

falso

Não tenho ideia de como resolver isso.

5

8 Respostas

Que tal algo como isso:

!![1,2,3,4,5].reduce((n, item) => n !== false && item >= n && item)
// true

!![1,2,8,9,9].reduce((n, item) => n !== false && item >= n && item)
// true 

!![1,2,2,3,2].reduce((n, item) => n !== false && item >= n && item)
// false

Reduzir reduzirá literalmente o array a um único valor - um booleano no nosso caso.

Here, we are calling a function per iteration, the (n, item) is our function signature, it's body being n && item >- n && item - we are making sure that n exists (n is our accumulator - read up!), testing if item is greater than n, and making sure item exists.

Isso acontece para todos os elementos da sua matriz. Em seguida, usamos !! para forçar o resultado em um booleano tru.

8
adicionado
Isso é inteligente, embora valha a pena dar uma explicação ao usuário, programadores inexperientes nunca entenderiam o que está acontecendo aqui. Para fins de teste, aqui está um violino: jsfiddle.net/briosheje/46r1jm03
adicionado o autor briosheje, fonte
De fato. [0, 1, 2, 3, 4, 5] retornará false .
adicionado o autor VisioN, fonte
@Stuart Apenas mude n && para n! == false && em lambda.
adicionado o autor VisioN, fonte
.reduce ((n, item) => n && item> = n && item) pode ser refatorado em um método
adicionado o autor Kunal Mukherjee, fonte
@VisioN Este é um ponto muito bom, de fato.
adicionado o autor Stuart, fonte
@KunalMukherjee Correto. Isso será um exercício de OP embora eh ... :)
adicionado o autor Stuart, fonte
Boa implementação do uso de funções de ordem superior, você tem meu up-vote!
adicionado o autor Peter Bode, fonte

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var str = ["1,2,3,4,5", "1,2,8,9,9", "1,2,2,3,2"];

for (var i in str){
    var list = str[i].split(',').map(Number);
    console.log(list);
    var isSorted = true;
    for(var j = 0 ; j < list.length - 1 ; j++){
        if(list[j] <= list[j+1]) continue;
        else
        {
            isSorted = false;
            break;
        }
    }
    console.log(isSorted);
}
</div> </div>
2
adicionado
Isso é realmente fácil, mas você sabia como criar meu Array como seu (str): pastebin.com/tBFd9Uft
adicionado o autor Николай Матев, fonte

Maneira simples

   var arr = [ [ 1, 2, 3, 4, 5 ], [ 1, 2, 8, 9, 9 ], [ 1, 2, 2, 3, 2 ] ];
    for (var j in arr) {
    sorted = true;
    for (var i = 0; i < arr[j].length - 1; i++) {
        if (arr[j][i] > arr[j][i+1]) {
            sorted = false;
           break;
        }
    }
            console.log(sorted);
    }

Referência

Como o foreach do JavaScript funciona com matrizes multidimensionais?

Como verificar se a matriz já está classificada

1
adicionado

Basta tentar desta forma usando o método slice :

[1,2,3,4,5].slice(1).every((item, i) => arr[i] <= item)


Check-out abaixo como amostra de demonstração

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var arr = [[1,2,3,4,5],[1,2,8,9,9],[1,2,2,3,2],[0,1,2,3,4,5]];

function isArrayIsSorted (arr) {
  return arr.slice(1).every((item, i) => arr[i] <= item)
}

var result= [];
for (var i = 0; i < arr.length; i++){
result.push(isArrayIsSorted(arr[i]))
}
console.log(result);
</div> </div>
0
adicionado

Você pode usar o array # every para verificar se cada valor é maior que o valor anterior.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

const isSorted = arr => arr.every((v,i,a) => !i ? true : a[i-1] <= v);
console.log(isSorted([1,2,3,4,5]));
console.log(isSorted([1,2,8,9,9])); 
console.log(isSorted([1,2,2,3,2]));
</div> </div>
0
adicionado

Há muitas maneiras de fazer isso. Aqui é minha

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="true"> <div class="snippet-code">

const isArraySorted = array =>
  array
  .slice(0)//clone array
  .sort((a, b) => a - b)//sort it
  .every((el, i) => el === array[i])//compare with initial value)
</div> </div>
0
adicionado

Talvez você possa usar este método de ajuda que verifica se está classificado corretamente:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

    var arr1 = [1, 2, 3, 4, 4];
    var arr2 = [3, 2, 1];

                console.log(checkList(arr1));
                console.log(checkList(arr2));
    
    function checkList(arr) {
        for (var i = 0; i < arr.length; i++) {
            if (arr[i + 1]) {
                if (arr[i] > arr[i + 1]) {
                    return false;
                }
            }

        }
        return true;
    }
</div> </div>
0
adicionado

Se eu entendi o que você quer dizer, você quer saber se uma matriz está ordenada ou não. Este é um exemplo de tal solução, tente. Eu colei alguns códigos abaixo.

var myArray=[1,4,3,6];

if(isSorted(myArray)){

    console.log("List is sorted");
}else{
    console.log("List is not sorted");
}

function isSorted(X){

var sorted=false;

for(var i=0;i<=X.length-1){

        if(X[i]>X[next]){
            sorted=false;
            break;
        }else{
            sorted=true;

        }
    }

}


return sorted;

}
0
adicionado
JavaScript Brasil OFICIAL
JavaScript Brasil OFICIAL
4 138 dos participantes

Grupo sobre JavaScript do Brasil