JavaScript sorte comparateur de fonction
Fondamentalement, je veux construire une fonction qui trie les objets dans un tableau par l'une des propriétés de l'objet/variables membres. Je suis preeeety assurer que le comparateur de fonction est où l'erreur est caché, mais je ne suis pas sûr à 100%.
La sortie, je devrait arriver après la fonction de tri est appelé est 1,2,3
. Je reçois 1,3,2
ce qui signifie qu'il est inchangé
C'est l'ensemble du code js (avec des commentaires):
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: la solution est La suivante - Comme l'a dit, le comparateur de fonction était vraiment le problème, la bonne façon de l'écrire est la suivante:
function compareFN(taskA, taskB) {
return taskA.priority < taskB.priority;
}
Vous devez vous connecter pour publier un commentaire.
De la fonction de comparaison a besoin de deux arguments: le premier et le deuxième élément qu'il faut comparer.
Si votre compareFN devrait ressembler à ceci:
Edit: Comme NPE dit, il est censé effectuer un comparaison à trois, de sorte qu'un simple
a < b
n'est pas tellement une bonne idée ici.Il y a plusieurs problèmes avec votre comparateur:
task
objet au lieu des objets comparés.Essayer:
Vous avez besoin de changer la signature de vous comparer la fonction d'inclure les deux tâches.
Dans l'ordre croissant (normalement ce que vous voulez) que vous devez faire b < a a < b fera par ordre décroissant