mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-08 02:17:48 +00:00
Make _.sortByOrder support orders of "asc" and "desc".
This commit is contained in:
@@ -416,8 +416,8 @@
|
|||||||
* sort them in ascending order.
|
* sort them in ascending order.
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
* @param {Object} object The object to compare to `other`.
|
* @param {Object} object The object to compare.
|
||||||
* @param {Object} other The object to compare to `object`.
|
* @param {Object} other The other object to compare.
|
||||||
* @returns {number} Returns the sort order indicator for `object`.
|
* @returns {number} Returns the sort order indicator for `object`.
|
||||||
*/
|
*/
|
||||||
function compareAscending(object, other) {
|
function compareAscending(object, other) {
|
||||||
@@ -425,16 +425,16 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used by `_.sortByOrder` to compare multiple properties of each element
|
* Used by `_.sortByOrder` to compare multiple properties of a value to another
|
||||||
* in a collection and stable sort them in the following order:
|
* and stable sort them.
|
||||||
*
|
*
|
||||||
* If `orders` is unspecified, sort in ascending order for all properties.
|
* If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise,
|
||||||
* Otherwise, for each property, sort in ascending order if its corresponding value in
|
* a value is sorted in ascending order if its corresponding order is "asc", and
|
||||||
* orders is true, and descending order if false.
|
* descending if "desc".
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
* @param {Object} object The object to compare to `other`.
|
* @param {Object} object The object to compare.
|
||||||
* @param {Object} other The object to compare to `object`.
|
* @param {Object} other The other object to compare.
|
||||||
* @param {boolean[]} orders The order to sort by for each property.
|
* @param {boolean[]} orders The order to sort by for each property.
|
||||||
* @returns {number} Returns the sort order indicator for `object`.
|
* @returns {number} Returns the sort order indicator for `object`.
|
||||||
*/
|
*/
|
||||||
@@ -451,7 +451,8 @@
|
|||||||
if (index >= ordersLength) {
|
if (index >= ordersLength) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return result * (orders[index] ? 1 : -1);
|
var order = orders[index];
|
||||||
|
return result * ((order === 'asc' || order === true) ? 1 : -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
|
// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
|
||||||
@@ -7263,9 +7264,9 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is like `_.sortByAll` except that it allows specifying the
|
* This method is like `_.sortByAll` except that it allows specifying the
|
||||||
* sort orders of the iteratees to sort by. A truthy value in `orders` will
|
* sort orders of the iteratees to sort by. If `orders` is unspecified, all
|
||||||
* sort the corresponding property name in ascending order while a falsey
|
* values are sorted in ascending order. Otherwise, a value is sorted in
|
||||||
* value will sort it in descending order.
|
* ascending order if its corresponding order is "asc", and descending if "desc".
|
||||||
*
|
*
|
||||||
* If a property name is provided for an iteratee the created `_.property`
|
* If a property name is provided for an iteratee the created `_.property`
|
||||||
* style callback returns the property value of the given element.
|
* style callback returns the property value of the given element.
|
||||||
@@ -7279,7 +7280,7 @@
|
|||||||
* @category Collection
|
* @category Collection
|
||||||
* @param {Array|Object|string} collection The collection to iterate over.
|
* @param {Array|Object|string} collection The collection to iterate over.
|
||||||
* @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
|
* @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
|
||||||
* @param {boolean[]} orders The sort orders of `iteratees`.
|
* @param {boolean[]} [orders] The sort orders of `iteratees`.
|
||||||
* @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
|
* @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
|
||||||
* @returns {Array} Returns the new sorted array.
|
* @returns {Array} Returns the new sorted array.
|
||||||
* @example
|
* @example
|
||||||
@@ -7292,7 +7293,7 @@
|
|||||||
* ];
|
* ];
|
||||||
*
|
*
|
||||||
* // sort by `user` in ascending order and by `age` in descending order
|
* // sort by `user` in ascending order and by `age` in descending order
|
||||||
* _.map(_.sortByOrder(users, ['user', 'age'], [true, false]), _.values);
|
* _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values);
|
||||||
* // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
|
* // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
|
||||||
*/
|
*/
|
||||||
function sortByOrder(collection, iteratees, orders, guard) {
|
function sortByOrder(collection, iteratees, orders, guard) {
|
||||||
|
|||||||
16
test/test.js
16
test/test.js
@@ -14525,14 +14525,18 @@
|
|||||||
{ 'a': 'y', 'b': 2 }
|
{ 'a': 'y', 'b': 2 }
|
||||||
];
|
];
|
||||||
|
|
||||||
test('should sort multiple properties by specified orders', 1, function() {
|
test('should sort multiple properties by specified orders', 2, function() {
|
||||||
var actual = _.sortByOrder(objects, ['a', 'b'], [false, true]);
|
_.each([[false, true], ['desc', 'asc']], function(orders) {
|
||||||
deepEqual(actual, [objects[3], objects[1], objects[2], objects[0]]);
|
var actual = _.sortByOrder(objects, ['a', 'b'], orders);
|
||||||
|
deepEqual(actual, [objects[3], objects[1], objects[2], objects[0]]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should sort a property in ascending order when its order is not specified', 1, function() {
|
test('should sort a property in ascending order when its order is not specified', 2, function() {
|
||||||
var actual = _.sortByOrder(objects, ['a', 'b'], [false]);
|
_.each([[false], ['desc']], function(orders) {
|
||||||
deepEqual(actual, [objects[3], objects[1], objects[2], objects[0]]);
|
var actual = _.sortByOrder(objects, ['a', 'b'], orders);
|
||||||
|
deepEqual(actual, [objects[3], objects[1], objects[2], objects[0]]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}());
|
}());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user