1
+ PolymerExpressions . prototype . orderBy = function ( array , columnsToOrderBy , reverse ) {
2
+ if ( ! Array . isArray ( array ) ) {
3
+ return array ;
4
+ }
5
+ if ( ! columnsToOrderBy ) {
6
+ return array ;
7
+ }
8
+ if ( typeof columnsToOrderBy === 'string' ) {
9
+ columnsToOrderBy = [ columnsToOrderBy ] ;
10
+ }
11
+
12
+ // on a column-by-column basis, determine if descending order is desired
13
+ var reverseSortValues = [ ] ;
14
+ columnsToOrderBy . forEach ( function ( element , index ) {
15
+ if ( element [ 0 ] == '-' ) {
16
+ columnsToOrderBy [ index ] = element . substr ( 1 ) ;
17
+ reverseSortValues . push ( true ) ;
18
+ } else {
19
+ reverseSortValues . push ( false ) ;
20
+ }
21
+ } ) ;
22
+
23
+ // temporary holder of position and sort-values
24
+ var map = array . map ( function ( element , index ) {
25
+ var sortValues = columnsToOrderBy . map ( function ( key ) {
26
+ if ( typeof element [ key ] === 'string' ) {
27
+ return element [ key ] . toLowerCase ( ) ;
28
+ }
29
+
30
+ return element [ key ] ;
31
+ } ) ;
32
+
33
+ return {
34
+ index : index ,
35
+ sortValues : sortValues
36
+ } ;
37
+ } ) ;
38
+
39
+ // sorting the map containing the reduced values
40
+ map . sort ( function ( a , b ) {
41
+ var length = a . sortValues . length ;
42
+
43
+ for ( var i = 0 ; i < length ; i ++ ) {
44
+ if ( reverseSortValues [ i ] === false ) {
45
+ if ( a . sortValues [ i ] < b . sortValues [ i ] )
46
+ return - 1 ;
47
+ else if ( a . sortValues [ i ] > b . sortValues [ i ] )
48
+ return 1 ;
49
+ } else {
50
+ if ( a . sortValues [ i ] > b . sortValues [ i ] )
51
+ return - 1 ;
52
+ else if ( a . sortValues [ i ] < b . sortValues [ i ] )
53
+ return 1 ;
54
+ }
55
+ }
56
+
57
+ return 0 ;
58
+ } ) ;
59
+
60
+ if ( reverse === true ) {
61
+ map . reverse ( ) ;
62
+ }
63
+
64
+ // container for the resulting order
65
+ var result = map . map ( function ( element ) {
66
+ return array [ element . index ] ;
67
+ } ) ;
68
+
69
+ return result ;
70
+ } ;
0 commit comments