2016-09-04 5 views
0

Ich habe ein Array von Objekten, in denen jedes Objekt eine date -Eigenschaft hat. Ich möchte alle Objekte mit demselben Datum in ein Array verschieben und so viele Arrays wie die verschiedenen Datumswerte erstellen. Was wäre der beste Weg, um über das Array zu iterieren und dieses Array zu sortieren. Die Verwendung von winkelförmigen Array-Funktionen ist in Ordnung.JavaScript-Objekt basierend auf einer Datumseigenschaft sortieren

Antwort

1

Ich würde eine Mischung aus orderby $ Filter und einem einfachen für Array tun. Mal sieht, es durch ein Beispiel:

//example values.. 
var objects = [{exampleProp: undefined, date:new Date(3,1,1970) }, 
       {exampleProp: undefined, date:new Date(2,1,1970)}, 
       {exampleProp: undefined, date:new Date(2,1,1970)}, 
       {exampleProp: undefined, date:new Date(1,1,1970)}]; 


//ordering your master array by date property.. 
objects = $filter('orderBy', objects, 'date')($scope); 

//grouping by date your master object.. 
var dictionary = {}; 
objects.forEach(function(object){ 
    if(dictionary[object.date] == undefined) 
     dictionary[object.date] = []; 

    dictionary[object.date].push(object); 
}); 

//transforming your dictionary to an array of array.... 
var objectsByDate = []; 
for(var date in dictionary) 
    objectsByDate.push(dictionary[date]); 

siehe $filter und orderby Dokumentation zu sehen, wie Sie es von einer Objekteigenschaft bestellen

+0

Einfach nur neugierig, gibt es einen Unterschied hier in mit '==' statt '===' für 'if (dictionary [object.date) == undefined'? Ich bin ehrlich gesagt neugierig, weil ich dazu neige, '===' zu verwenden. – Mdd

+1

In feuchten Fällen sind sie ebenbürtig. == ist * etwas * langsamer als ===, da keine Typumwandlung benötigt wird. Für einen sehr guten Überblick, siehe diesen Beitrag http://stackoverflow.com/a/359509/1306679 – Luxor001

+0

Danke @ Luxor001! Es funktionierte. –

Verwandte Themen