2015-11-20 6 views
0

Я пытаюсь заказать список groupBy по значениям группы (дата и время). Я использую angular-filter library.угловой фильтр groupby с orderby

Это то данные

[ 
    { 
    "id": 1, 
    "pickupDate": "2015-12-04", 
    "time": "17:00" 
    }, 
    { 
    "id": 1, 
    "pickupDate": "2015-12-03", 
    "time": "12:00" 
    }, 
    { 
    "id": 2, 
    "pickupDate": "2015-12-01", 
    "time": "12:00" 
    }, 
    { 
    "id": 2, 
    "pickupDate": "2015-12-02", 
    "time": "09:00" 
    }, 
    { 
    "id": 3, 
    "pickupDate": "2016-03-01", 
    "time": "10:00" 
    }, 
    { 
    "id": 3, 
    "pickupDate": "2015-12-01", 
    "time": "11:00" 
    }, 
    { 
    "id": 4, 
    "pickupDate": "2015-12-13", 
    "time": "14:00" 
    }, 
    { 
    "id": 4, 
    "pickupDate": "2015-12-02", 
    "time": "11:15" 
    } 
] 

То, что я пытаюсь сделать:

  1. Группировка данных по идентификационной Собствености (проведенная | GroupBy: 'идентификатор')
  2. Заказ групп на основе наименьшей даты и времени среди групп

Я борюсь с заказом.

Вот как список должен выглядеть

3 
    01-12-2015 - 11:00 
    01-03-2016 - 10:00 

2 
    01-12-2015 - 12:00 
    02-12-2015 - 09:00 

4 
    02-12-2015 - 11:15 
    13-12-2015 - 14:00 

1 
    03-12-2015 - 12:00 
    04-12-2015 - 17:00 

Здесь plunker link

Большое спасибо!

+0

чем проблема на самом деле? Я не понимаю ... – Beat

+0

@beat - Спасибо за ваше время! Я редактировал свой пост. Надеюсь, теперь это станет яснее. Еще раз спасибо! – stevo

ответ

0

В заключение я напишу свой собственный фильтр. Я использовал подчеркивание lib.

здесь мое решение в машинописи.

module App { 

    export interface IFooFilter extends ng.IFilterService { 
     (name:"foo-filter"): (collection:any[]) => any[]; 
    } 

    class FooFilter { 
     static $inject:string[] = ["underscore"]; 

     static ConvertDateAndTime(item:any):number { 
      return item.pickupDate.replace(/\-/g, '') + item.time.replace(':', ''); 
     } 

     public static Factory(underscore:UnderscoreStatic) { 
      return underscore.memoize((collection:any[]) => { 
       var groupKey = "id"; 

       var group:any = underscore.groupBy(collection, (item:any) => { 
        return item[groupKey]; 
       }); 

       var grpArray = []; 
       angular.forEach(group, (item) => { 
        grpArray.push({ 
         "groupKey": item[0][groupKey], 
         "items": item 
        }); 
       }); 

       var grpArraySorted = underscore.sortBy(grpArray, (grpObj:any) => { 

        var min:any = underscore.min(grpObj.items, (item:any) => { 
         return FooFilter.ConvertDateAndTime(item); 
        }); 

        return FooFilter.ConvertDateAndTime(min); 
       }); 

       return grpArraySorted; 
      }); 
     } 
    } 

    angular.module("app").filter("fooFilter", FooFilter.Factory); 
} 

here the link to plucker

Смежные вопросы