Ich habe zwei Arrays von Objekten wie unten:
%Vor% Ich versuche, das Elementarray zu sortieren, aber ich möchte die Daten im pkgs-Array nutzen.
Das Feld "item_id" im pkgs-Array entspricht dem Feld "id" im items-Array.
Zum Beispiel möchte ich sortieren:
- zuerst von "tobuy" in absteigender Reihenfolge
- dann nach "store"
- dann nach "gang"
- dann mit "name"
Während item_id und id zwischen den beiden Arrays übereinstimmen, gibt es keine 1: 1-Beziehung. Es könnte 0 oder mehr pkg geben, die einem bestimmten Gegenstand entsprechen.
(Wenn ich eine Datenbank hätte, würde ich einfach die Tabellen verbinden, aber in JavaScript habe ich nur die zwei verwandten Arrays).
Ich bin mir nicht sicher, wie ich die Komparatorfunktion aufbauen und das zweite Array übergeben soll.
Danke für jede Hilfe.
Vielleicht so etwas?
%Vor%Anstatt die Daten zusammenzuführen, können Sie auch eine Lookup-Map erstellen, mit der Sie das zugehörige Paket direkt aus der Sortierfunktion abrufen können.
z. B.
%Vor%Dann in der Sortierfunktion können Sie tun:
%Vor%BEARBEITEN:
Es gibt tatsächlich ein anderes Feld im pkgs-Array, das "ppu" genannt wird ist der Preis pro Einheit. Der niedrigste ppu ist derjenige, der verwendet würde.
Sie können Ihre Paketzuordnung einfach mit den folgenden Befehlen erstellen und dann die Zuordnung in der Sortierfunktion verwenden, um das zugehörige Paket wie oben beschrieben abzurufen und den Sortieralgorithmus zu implementieren.
%Vor%Machen Sie eine Funktion, die einen Vergleicher erzeugt, dies sieht unhandlich aus, bedeutet aber, dass Sie jede gewünschte Sortierreihenfolge erzeugen können
%Vor%Konvertiere deine Arrays in ein Wörterbuch
%Vor%Definieren Sie Ihre Sortieroptionen
%Vor%Generiere Komparator mit Wörterbuch
%Vor%Dann sortiere dein erstes Array
%Vor%Betrachten wir, wie Sie das in SQL machen würden:
%Vor%Die folgende Antwort demonstriert, wie ein innerer Join und ein Equijoin in JavaScript implementiert werden:
%Vor% Jetzt können Sie equijoin
verwenden, um items
und pkgs
wie folgt beizutreten:
Beachten Sie, dass ich item.id
, item.tobuy
und pkg.aisle
auf Zahlen anwende, indem Sie den unären Operator +
auf sie anwenden.
Nun, da wir uns den zwei Tabellen angeschlossen haben, müssen wir sie sortieren. Um die Tabelle zu sortieren, verwenden wir das eingebaute Array sort
Methode:
Die sort
-Methode ist unstable (dh sie behält möglicherweise nicht die Reihenfolge der Elemente mit gleichem Sortierwert bei in der Eingabeliste). Zur Umgehung dieser Einschränkung geben wir daher a.id - b.id
als letzte Anweisung zurück.
Beachten Sie auch, dass wir alle Werte (Strings oder Zahlen) mit <
und >
vergleichen. Strings werden lexikografisch verglichen, während Zahlen numerisch verglichen werden.
Stellen Sie den Code wie folgt zusammen:
%Vor%Nicht so knapp wie SQL ist es? Wie auch immer, sehen Sie sich die Demo selbst an: Ссылка
Bearbeiten: Wenn Sie nur die Spalten id
, tobuy
und name
möchten, dann können Sie sie aus der sortierten Tabelle mit map
wie folgt extrahieren:
Dies entspricht der folgenden SQL-Abfrage:
%Vor%Sehen Sie die aktualisierte Demo: Ссылка
Tags und Links javascript arrays sorting