Array von JS-Daten So gruppieren Sie nach Tagen

8

Ich versuche herauszufinden, die optimale und mit so wenig Schleifen wie möglich, um meine Array von js Daten Objekte von diesem zu gruppieren: (Nehmen Sie eine Notiz, dies ist Browser-Konsole Ausgabe ist es wirklich real JS Daten wie neu Datum ( ))

%Vor%

oragnized Array mit jedem Datum des gleichen Tages in einem "Chunk", so dass ich es auf der Benutzeroberfläche "Aug 08" anzeigen und 2 oder wie viele Daten an diesem Tag zeigen kann.

zum Beispiel: [{day: 'Aug 08', times:[Sat Aug 08 2015 08:30:00 GMT+0200 (Central Europe Daylight Time), Sat Aug 08 2015 09:30:00 GMT+0200 (Central Europe Daylight Time)]}]

Mein aktueller Weg, über den ich nachgedacht habe, war

%Vor%

Danach um einzigartige Tage zu bekommen:

%Vor%

Und nachdem ich die einzigartigen Tage bekommen habe, eine weitere Schleife, um den gleichen Tag zu dieser Gruppe hinzuzufügen, wie du jetzt sehen kannst, könntest du sehen, warum ich es nicht mag und deshalb würde ich gerne etwas schlaue Hilfe bekommen, weil nichts geht mir damit auf den Kopf. Danke.

    
Mark 08.08.2015, 05:44
quelle

4 Antworten

27

Underscore hat die Funktion _. groupBy , die genau das tun sollte, was Sie wollen:

%Vor%

Dies gibt ein Objekt zurück, bei dem jeder Schlüssel ein Tag ist und der Wert ein Array, das alle Vorkommen für diesen Tag enthält.

Um das Objekt in ein Array der gleichen Form wie in der Frage umzuwandeln, könnten Sie map:

verwenden %Vor%

Zum Gruppieren, Zuordnen und Sortieren können Sie Folgendes tun:

%Vor%     
Gruff Bunny 08.08.2015, 08:24
quelle
5

Vorausgesetzt, dass Ihre Daten tatsächlich Zeichenfolgen sind, weiß ich nicht, warum Sie glauben, dass Sie eine dieser Bibliotheken benötigen. Sie gruppieren nur Strings basierend auf Teilstrings.

ES5 führte reduzieren , was großartig ist, um Dinge zu sammeln:

Ein Helfer, um ein Array von Daten zu erstellen:

%Vor%

Diese Antwort hat sich ursprünglich mit Strings beschäftigt, die so modifiziert wurden, dass sie mit Datumsangaben funktionieren:

%Vor%

Wenn optimale Leistung der Schlüssel ist, ist das oben genannte 20-mal schneller als der Unterstrich + Moment-Lösung für ein Array von 5 bis 100 Daten. Um es schneller zu machen, entfernen Sie alle Iteratoren und Bibliotheken und verwenden Sie eine einzige Funktion mit for-Schleifen. Beachten Sie, dass oben nur eine Codezeile länger ist als die Lösung, die Moment.js und undscore.js verwendet.

    
RobG 08.08.2015 07:05
quelle
0

Wenn Sie auch nach Jahr oder (und) Monat mit Tag gruppieren müssen, empfehle ich, meine Lösung zu verwenden.

In den Antworten oben, wenn Sie am gleichen Tag einen anderen Monat oder ein anderes Jahr erhalten, ist Ihre Gruppierung inkorrekt.

Sehen Sie sich die gute Lösung an :

%Vor%

Was ich hier mache? Erstellen Sie einfach einen eindeutigen Schlüssel für jedes Datum, einschließlich: Jahr, Monat und Tag. Und dann gruppiere ich ein Array nach diesem eindeutigen Schlüssel.

Ergebnis

    
Niklavr 28.06.2017 20:40
quelle
-1

Warum brauchen Sie diese Optimierung? Wenn Ihr Array nicht groß ist, müssen Sie wahrscheinlich Ihren Algorithmus nicht optimieren.

Ich bin mit den angegebenen js-Bibliotheken nicht vertraut, aber Sie können Ihr Array nach Tagen mit einer Schleife gruppieren. Aber Sie müssen irgendwie den aktuellen Tag im Array bestimmen und dann ein entsprechendes js-Objekt mit einem Tag-Feld und einem Times-Array-Feld erstellen und dann dieses Objekt zu Ihrem resultierenden Array hinzufügen. Es wird viel schneller, wenn Sie Ihr Array vor der Implementierung dieses Algorithmus vorsortieren.

    
SergeyAn 08.08.2015 06:26
quelle