Skip to content

Commit de0ac50

Browse files
committed
Merge pull request #2595 from posva/fix/orderBy-primitives
Fix/order by primitives
2 parents ce2f2a3 + d532af7 commit de0ac50

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

src/filters/array-filters.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,18 @@ export function filterBy (arr, search, delimiter) {
7575
* Filter filter for arrays
7676
*
7777
* @param {String|Array<String>} sortKeys
78-
* @param {String} reverse
78+
* @param {Boolean} [order]
7979
*/
8080

81-
export function orderBy (arr, sortKeys, reverse) {
81+
export function orderBy (arr, sortKeys, order) {
8282
arr = convertArray(arr)
83-
let order = (reverse && reverse < 0) ? -1 : 1
83+
order = (order && order < 0) ? -1 : 1
8484

8585
if (typeof sortKeys === 'string') {
8686
sortKeys = [sortKeys]
87-
} else if (!sortKeys || !sortKeys.length) {
87+
} else if (!sortKeys || (sortKeys !== true && !sortKeys.length)) {
88+
// we check if sortKeys === true because you can sort primitive values with
89+
// array | orderBy true: http://vuejs.org/api/#orderBy
8890
return arr
8991
}
9092

@@ -101,7 +103,9 @@ export function orderBy (arr, sortKeys, reverse) {
101103

102104
function recursiveCompare (a, b, i) {
103105
i = i || 0
104-
if (i === sortKeys.length - 1) return compare(a, b, i)
106+
if (sortKeys === true || i === sortKeys.length - 1) {
107+
return compare(a, b, i)
108+
}
105109
return compare(a, b, i) || recursiveCompare(a, b, i + 1)
106110
}
107111

test/unit/specs/filters/filters_spec.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,13 @@ describe('Filters', function () {
230230
assertArray(res, [arr[1], arr[2], arr[0]])
231231
})
232232

233+
it('orderBy primitive values', function () {
234+
var filter = filters.orderBy
235+
var arr = [9, 11, 1, 2]
236+
var res = filter(arr, true)
237+
assertArray(res, [arr[2], arr[3], arr[0], arr[1]])
238+
})
239+
233240
it('orderBy multiple fields', function () {
234241
var filter = filters.orderBy
235242
var arr = [

0 commit comments

Comments
 (0)