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.
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);
}
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.
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]));
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);
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)
si le nombre actuel est inférieur ou égal au nombre suivant ...
OU...
si l'index actuel est égal au dernier index ...
return 1 (truthy)
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));
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)
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);
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;
}