У меня есть массив объектов, в котором каждый объект имеет свойство date. Я хочу переместить все объекты, имеющие одну и ту же дату, в массив и сделать столько массивов, сколько разных значений даты. Каким будет лучший способ перебора массива и сортировки этого массива. Использование функций углового массива в порядке.Сортировка объекта javascript на основе свойства date
0
A
ответ
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 документации, чтобы узнать, как вы можете заказать его с помощью свойства объекта
Просто любопытно, есть ли разница здесь в использовании '==' вместо '===' для 'if (dictionary [object.date] == undefined'? Мне очень любопытно, потому что я обычно использую '==='. – Mdd
Во влажном корпусе они равны. == is * немного * медленнее, чем ===, потому что преобразование типа не требуется. Для получения очень хорошего подробного обзора см. Этот пост http://stackoverflow.com/a/359509/1306679 – Luxor001
Спасибо @ Luxor001! Это сработало. –