wake-up-neo.com

Array in JS prüfen - Liste sortiert?

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

5
Jin

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.

16
Stuart

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

13
Hassan Imam

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

8

Sortierte Nummernlisten

Negative Zahlen, Nullen und benachbarte Duplikate enthalten

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)
  1. wenn die aktuelle Zahl kleiner oder gleich der nächsten Zahl ist ...

    ODER...

  2. wenn der aktuelle Index dem letzten Index entspricht ...

    return 1 (truthy)
    

Demo

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

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)

0
Dima Vishnyakov

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

0
HynekS

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

0
André