Question

J'ai un tableau d'objets JavaScript qui ont une description de chaîne.J'essaie d'implémenter un algorithme de tri simplifié qui supprimera la casse, supprimera les balises HTML, puis supprimera tout sauf les lettres et les chiffres.J'ai:

DASHBOARD.todo_entries.sort(function(first, second)
  {
  var first_workbench = first.description.toLowerCase();
  var second_workbench = second.description.toLowerCase();
  first_workbench = first_workbench.replace(/<.*?>/, '');
  second_workbench = second_workbench.replace(/<.*?>/, '');
  first_workbench = first_workbench.replace(/[^_\w]/, '');
  second_workbench = second_workbench.replace(/[^_\w]/, '');
  console.log('"' + first_workbench + '", "' + second_workbench + '"');
  return (first_workbench > second_workbench);
  });

À l'heure actuelle, cela génère systématiquement un ordre de tri avec des descriptions de :

Testing: d.
Testing: e.
Test: a.
Testing: f.
Test: c.
Test: b.
Testing: g.
Testing: b.
Testing: a.
Test: d.
Testing: c.
Testing: h.
Testing: i.
Testing: j.
Testing: k.
Testing: l.

Ce à quoi je m'attendrais, c'est qu'il aurait "Test :[a-d]" apparaissant dans l'ordre, puis "Test :[a-l]" apparaissant dans l'ordre.

Je ne sais pas comment coder quelque chose qui générerait naturellement cette commande ;cela ne correspond pas à leur ordre de création (je pense que les horaires/ordre de création de "Test :[a-d]" et "Test :[a-l]" se chevauchent, mais ils ont été créés individuellement dans un ordre séquentiel).

J'obtiens des résultats similaires, mais pas identiques, si je configure simplement la fonction pour comparer les descriptions inchangées avec < ou >.Au moins dans "Test"/"Testing", une recherche lexicographique inchangée devrait coïncider avec les résultats de la recherche souhaitée.J'ai cherché un peu dans mon code et je n'ai rien trouvé d'autre qui altère manifestement l'ordre de ce tableau.

Quelque chose semble faux ?

Merci,

Était-ce utile?

La solution

Le JS Array.sort la méthode prend une fonction de comparaison cmp(a, b) ça devrait revenir 1 ou un autre nombre positif (indiquant a < b), -1 ou un autre nombre négatif (indiquant b > a), ou 0 (indiquant les valeurs équivalentes) - voir le Documents MDN.Le vôtre renvoie un booléen, en fait uniquement 1 ou 0, donc le tri ne sera pas correct.

Essayer

return first_workbench === second_workbench ? 0 :
    first_workbench > second_workbench ? 1 : -1;

ou similaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top