2016-09-04 4 views
0

У меня есть массив объектов, в котором каждый объект имеет свойство date. Я хочу переместить все объекты, имеющие одну и ту же дату, в массив и сделать столько массивов, сколько разных значений даты. Каким будет лучший способ перебора массива и сортировки этого массива. Использование функций углового массива в порядке.Сортировка объекта javascript на основе свойства date

ответ

1

Я бы сделал смесь orderby $ filter и простой для массива. Давайте посмотрим это на примере:

//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]); 

см $filter и orderby документации, чтобы узнать, как вы можете заказать его с помощью свойства объекта

+0

Просто любопытно, есть ли разница здесь в использовании '==' вместо '===' для 'if (dictionary [object.date] == undefined'? Мне очень любопытно, потому что я обычно использую '==='. – Mdd

+1

Во влажном корпусе они равны. == is * немного * медленнее, чем ===, потому что преобразование типа не требуется. Для получения очень хорошего подробного обзора см. Этот пост http://stackoverflow.com/a/359509/1306679 – Luxor001

+0

Спасибо @ Luxor001! Это сработало. –