web-dev-qa-db-fra.com

Vérifier le tableau dans JS - la liste est-elle triée?

Je dois créer un programme qui vérifie que la liste du tableau est triée. J'ai trois données d'entrée:

1,2,3,4,5 

1,2,8,9,9 

1,2,2,3,2

Alors voici mon code:

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('true');
    } else {
        print('false');
    }
}

Je dois imprimer pour toutes les listes sur la nouvelle ligne true ou false. Pour cet exemple, ma sortie doit être:

vrai

vrai

false

Je ne sais pas comment résoudre ce problème.

13

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]) {
            isSorted = false;
            break;
        }
    }
    console.log(isSorted);
}

5
Jin

Que diriez-vous quelque chose comme ça:

!![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

Réduire réduira littéralement le tableau à une seule valeur - un booléen dans notre cas. 

Ici, nous appelons une fonction par itération, le (n, item) est notre signature, son corps étant n !== false && item >- n && item - nous nous assurons que n existe (n est notre accumulateur - lisez!), Testez si item est supérieur à n que item existe.

Cela se produit pour chaque élément de votre tableau. Nous utilisons ensuite !! pour forcer le résultat dans un booléen réel.

16
Stuart

Vous pouvez utiliser array#every pour vérifier si chaque valeur est supérieure à la valeur précédente.

const isSorted = arr => arr.every((v,i,a) => !i || 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]));

13
Hassan Imam

Essayez simplement cette méthode en utilisant la méthode slice: elle vérifiera si l'élément précédent est inférieur à l'élément suivant.Si la condition est vraie pour chaque élément, elle retournera true sinon false 

arr.slice(1).every((item, i) => arr[i] <= item);

Commander cet exemple ci-dessous en tant que démo 

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);

8
Ramesh Rajendran

Listes de numéros triés

Y compris les nombres négatifs, les zéros et les doublons adjacents

Utilisez la méthode every() qui renverra true si tous les nombres sont dans l’ordre, sinon elle renverra false. Les conditions sont les suivantes:

(num <= arr[idx + 1]) || (idx === arr.length - 1)
  1. si le nombre actuel est inférieur ou égal au nombre suivant ...

    OU...

  2. si l'index actuel est égal au dernier index ...

    return 1 (truthy)
    

Démo

var arr0 = [1, 2, 3, 4, 5];
var arr1 = [1, 2, 8, 9, 9];
var arr2 = [1, 2, 2, 3, 2];
var arr3 = [0, 0, 0, 1, 3];
var arr4 = [-3, 0, 1, 3, 3];
var arr5 = [-4, -2, 0, 0, -4];

function sorted(array) {
  return array.every(function(num, idx, arr) {
    return (num <= arr[idx + 1]) || (idx === arr.length - 1) ? 1 : 0;
  });
}

console.log(arr0 +' | '+sorted(arr0));
console.log(arr1 +' | '+sorted(arr1));
console.log(arr2 +' | '+sorted(arr2));
console.log(arr3 +' | '+sorted(arr3));
console.log(arr4 +' | '+sorted(arr4));
console.log(arr5 +' | '+sorted(arr5));

3
zer00ne

Il y a beaucoup de façons de le faire. Voici le mien 

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)

0
Dima Vishnyakov

Vous pouvez vérifier si la copie triée avec stringification du tableau original a la même valeur que celle . Peut-être pas le plus cool ou le plus performant, mais j'aime sa simplicité et sa clarté. 

const arraysToCheck = [
  [1, 2, 3, 4, 5],
  [1, 2, 8, 9, 9],
  [1, 2, 2, 3, 2]
]

const isSorted = arraysToCheck.map(
  item => JSON.stringify([...item].sort((a, b) => a - b)) === JSON.stringify(item)
 );


console.log(isSorted);

0
HynekS

Peut-être que vous pouvez utiliser cette méthode d'aide qui vérifie si est trié correctement:

    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;
    }

0
André