JavaScript Sortieren Komparator-Funktion
Grundsätzlich will ich bauen, eine Funktion, die die möglichen Objekte in einem array durch eine der Objekt-Eigenschaften/member-Variablen. Ich bin preeeety Sie sicher, dass der Komparator-Funktion, wo der Fehler versteckt ist, aber ich bin mir nicht 100% sicher.
Die Ausgabe, die ich bekommen sollte, nachdem die Sortieren-Funktion aufgerufen wird, ist 1,2,3
. Ich bekomme 1,3,2
was bedeutet, dass es unverändert ist
Dies ist der gesamte js-code (mit einigen Anmerkungen):
var arr = [];
//object definition and creation
var main = document.getElementById("main");
var task = {
name: "",
priority: 0
};
//first
var one = Object.create(task);
one.priority = 1;
//secondd
var two = Object.create(task)
two.priority = 3;
//last
var three = Object.create(task);
three.priority = 2;
//append
arr.push(one);
arr.push(two);
arr.push(three);
//sort function
function sortT() {
arr.sort(compareFN);
}
//comperator function
function compareFN() {
return task.priority < task.priority;
}
function print() {
for (var i = 0; i < arr.length; i++) {
console.log(arr[i].priority);
}
}
//execution of the program
print();
sortT();
print();
EDIT: Die Lösung ist folgende - Wie gesagt, der Komparator-Funktion war wirklich das problem, den richtigen Weg zu schreiben, es ist folgende:
function compareFN(taskA, taskB) {
return taskA.priority < taskB.priority;
}
InformationsquelleAutor Stanimirovv | 2013-06-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die compare-Funktion benötigt zwei Argumente: das erste und das zweite element-es sollte vergleichen.
So Ihr compareFN sollte wie folgt Aussehen:
Edit: Als NPE, sagte, es soll ein drei-Wege-Vergleich, so dass eine einfache
a < b
ist nicht so eine tolle Idee hier.Der Vergleich ist falsch; siehe NPE-Antwort für die richtige Lösung. MDN-Art-Referenz
InformationsquelleAutor robbi5
Gibt es mehrere Probleme mit Ihrem Komparator:
task
- Objekt statt der Objekte, die verglichen werden.Versuchen:
InformationsquelleAutor NPE
Müssen Sie ändern Sie die Signatur aus, die Sie vergleichen-Funktion auf die beiden Aufgaben.
Für die aufsteigende Reihenfolge (normalerweise das, was Sie wollen), die Sie tun müssen, b < a, < b tun absteigender Reihenfolge
InformationsquelleAutor dougajmcdonald