Ich muss ein Programm erstellen, das überprüft, ob die Liste im Array sortiert ist. Ich habe drei Eingabedaten:
1,2,3,4,5
1,2,8,9,9
1,2,2,3,2
Also hier ist mein 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');
}
}
Ich muss für alle Listen in der neuen Zeile true oder false drucken. Für dieses Beispiel muss meine Ausgabe sein:
wahr
wahr
false
Ich habe keine Ahnung, wie ich das lösen kann.
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);
}
Wie wäre es mit so etwas:
!![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
Reduce reduziert das Array buchstäblich auf einen einzigen Wert - in unserem Fall ein Boolean.
Hier rufen wir eine Funktion pro Iteration auf, der (n, item)
ist unsere Funktionssignatur. Sein Körper ist n !== false && item >- n && item
- wir sorgen dafür, dass n
existiert (n ist unser Akkumulator - lesen Sie nach!) Und testen, ob item
größer ist als n
, und machen sicher, dass item
existiert.
Dies geschieht für jedes Element in Ihrem Array. Wir verwenden dann !!
, um das Ergebnis in einen tru boolean zu erzwingen.
Sie können array#every
verwenden, um zu überprüfen, ob jeder Wert größer als der vorherige Wert ist.
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]));
Versuchen Sie es einfach mit der
slice
-Methode: Es wird geprüft, ob das vorherige Element kleiner als das nächste Element ist
arr.slice(1).every((item, i) => arr[i] <= item);
Testen Sie dieses Beispiel als Demo
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);
Verwenden Sie die every()
-Methode, die true zurückgibt, wenn alle Zahlen in der richtigen Reihenfolge sind. Die Bedingungen sind wie folgt:
(num <= arr[idx + 1]) || (idx === arr.length - 1)
wenn die aktuelle Zahl kleiner oder gleich der nächsten Zahl ist ...
ODER...
wenn der aktuelle Index dem letzten Index entspricht ...
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));
Dafür gibt es viele Möglichkeiten. Hier ist mein
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)
Sie können überprüfen, ob stringified sortierte Kopie des ursprünglichen Arrays denselben Wert wie das ursprüngliche Array hat. Vielleicht nicht der coolste oder performanteste, aber ich mag die Einfachheit und Klarheit.
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);
Vielleicht können Sie diese Hilfsmethode verwenden, die überprüft, ob die Sortierung korrekt ist:
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;
}