Skip to content

Commit 6cddfa4

Browse files
committed
Add orderBy filter.
1 parent 3eb55eb commit 6cddfa4

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

filter-orderBy.js

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
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

Comments
 (0)