mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-07 10:07:48 +00:00
Allow _.sortBy to accept an array for callback.
This commit is contained in:
57
dist/lodash.underscore.js
vendored
57
dist/lodash.underscore.js
vendored
@@ -115,22 +115,29 @@
|
||||
*/
|
||||
function compareAscending(a, b) {
|
||||
var ac = a.criteria,
|
||||
bc = b.criteria;
|
||||
bc = b.criteria,
|
||||
index = -1,
|
||||
length = ac.length;
|
||||
|
||||
// ensure a stable sort in V8 and other engines
|
||||
// http://code.google.com/p/v8/issues/detail?id=90
|
||||
if (ac !== bc) {
|
||||
if (ac > bc || typeof ac == 'undefined') {
|
||||
return 1;
|
||||
}
|
||||
if (ac < bc || typeof bc == 'undefined') {
|
||||
return -1;
|
||||
while (++index < length) {
|
||||
var value = ac[index],
|
||||
other = bc[index];
|
||||
|
||||
if (value !== other) {
|
||||
if (value > other || typeof value == 'undefined') {
|
||||
return 1;
|
||||
}
|
||||
if (value < other || typeof other == 'undefined') {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
// The JS engine embedded in Adobe applications like InDesign has a buggy
|
||||
// `Array#sort` implementation that causes it, under certain circumstances,
|
||||
// to return the same value for `a` and `b`.
|
||||
// See https://github.com/jashkenas/underscore/pull/1247
|
||||
// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
|
||||
// that causes it, under certain circumstances, to return the same value for
|
||||
// `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247
|
||||
//
|
||||
// This also ensures a stable sort in V8 and other engines.
|
||||
// See http://code.google.com/p/v8/issues/detail?id=90
|
||||
return a.index - b.index;
|
||||
}
|
||||
|
||||
@@ -2734,6 +2741,9 @@
|
||||
* If a property name is provided for `callback` the created "_.pluck" style
|
||||
* callback will return the property value of the given element.
|
||||
*
|
||||
* If an array of property names is provided for `callback` the collection
|
||||
* will be sorted by each property value.
|
||||
*
|
||||
* If an object is provided for `callback` the created "_.where" style callback
|
||||
* will return `true` for elements that have the properties of the given object,
|
||||
* else `false`.
|
||||
@@ -2742,7 +2752,7 @@
|
||||
* @memberOf _
|
||||
* @category Collections
|
||||
* @param {Array|Object|string} collection The collection to iterate over.
|
||||
* @param {Function|Object|string} [callback=identity] The function called
|
||||
* @param {Array|Function|Object|string} [callback=identity] The function called
|
||||
* per iteration. If a property name or object is provided it will be used
|
||||
* to create a "_.pluck" or "_.where" style callback, respectively.
|
||||
* @param {*} [thisArg] The `this` binding of `callback`.
|
||||
@@ -2755,9 +2765,20 @@
|
||||
* _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math);
|
||||
* // => [3, 1, 2]
|
||||
*
|
||||
* var characters = [
|
||||
* { 'name': 'barney', 'age': 36 },
|
||||
* { 'name': 'fred', 'age': 40 },
|
||||
* { 'name': 'barney', 'age': 26 },
|
||||
* { 'name': 'fred', 'age': 30 }
|
||||
* ];
|
||||
*
|
||||
* // using "_.pluck" callback shorthand
|
||||
* _.sortBy(['banana', 'strawberry', 'apple'], 'length');
|
||||
* // => ['apple', 'banana', 'strawberry']
|
||||
* _.map(_.sortBy(characters, 'age'), _.values);
|
||||
* // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]]
|
||||
*
|
||||
* // sorting by multiple properties
|
||||
* _.map(_.sortBy(characters, ['name', 'age']), _.values);
|
||||
* // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]
|
||||
*/
|
||||
function sortBy(collection, callback, thisArg) {
|
||||
var index = -1,
|
||||
@@ -2767,7 +2788,7 @@
|
||||
callback = createCallback(callback, thisArg, 3);
|
||||
forEach(collection, function(value, key, collection) {
|
||||
result[++index] = {
|
||||
'criteria': callback(value, key, collection),
|
||||
'criteria': [callback(value, key, collection)],
|
||||
'index': index,
|
||||
'value': value
|
||||
};
|
||||
@@ -4233,7 +4254,7 @@
|
||||
* _.capitalize('fred');
|
||||
* // => 'Fred'
|
||||
*
|
||||
* _('fred').capitalize();
|
||||
* _('fred').capitalize().value();
|
||||
* // => 'Fred'
|
||||
*/
|
||||
function mixin(object) {
|
||||
|
||||
Reference in New Issue
Block a user