Frage

Ich habe ein Array von JavaScript-Objekten, die eine Zeichenfolgenbeschreibung haben.Ich versuche, einen vereinfachten Sortieralgorithmus zu implementieren, der die Groß- und Kleinschreibung weglässt, HTML-Tags entfernt und dann alles außer Buchstaben und Ziffern entfernt.Ich habe:

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

Derzeit wird regelmäßig eine Sortierreihenfolge mit Beschreibungen von Folgendem generiert:

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.

Was ich erwarten würde, ist, dass es „Test:[a-d]“ erscheint der Reihe nach und dann „Testen:[a-l]“ erscheint der Reihe nach.

Ich bin mir nicht sicher, wie ich etwas codieren soll, das diese Reihenfolge auf natürliche Weise generiert.es stimmt nicht mit ihrer Erstellungsreihenfolge überein (ich denke, die Erstellungszeiten/-reihenfolge von „Test:[a-d]“ und „Testen:[a-l]“ überschneiden sich, sie wurden jedoch einzeln in sequentieller Reihenfolge erstellt.

Ich erhalte ähnliche, aber nicht identische Ergebnisse, wenn ich die Funktion nur so einstelle, dass die unveränderten Beschreibungen entweder mit < oder > verglichen werden.Zumindest innerhalb von „Test“/„Testing“ sollte eine unveränderte lexikografische Suche mit den Ergebnissen der von mir gewünschten Suche übereinstimmen.Ich habe meinen Code ein wenig durchsucht und nichts anderes gefunden, was offensichtlich die Reihenfolge dieses Arrays manipuliert.

Fällt Ihnen irgendetwas als falsch auf?

Danke,

War es hilfreich?

Lösung

Der JS Array.sort Die Methode übernimmt eine Komparatorfunktion cmp(a, b) das sollte wiederkommen 1 oder eine andere positive Zahl (angibt a < b), -1 oder eine andere negative Zahl (angibt b > a), oder 0 (Angabe äquivalenter Werte) – siehe MDN-Dokumente.Ihre gibt einen booleschen Wert zurück, nur effektiv 1 oder 0, also wird es nicht richtig sortiert.

Versuchen

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

o.ä.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top