mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-07 10:07:48 +00:00
Absorb _.sortByAll into _.sortBy.
This commit is contained in:
committed by
John-David Dalton
parent
86be6d7897
commit
a898c3d7bc
@@ -2752,17 +2752,21 @@
|
|||||||
* @private
|
* @private
|
||||||
* @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[]|string[]} orders The sort orders of `iteratees`.
|
||||||
* @returns {Array} Returns the new sorted array.
|
* @returns {Array} Returns the new sorted array.
|
||||||
*/
|
*/
|
||||||
function baseSortByOrder(collection, iteratees, orders) {
|
function baseSortByOrder(collection, iteratees, orders) {
|
||||||
var callback = getIteratee(),
|
var toIteratee = getIteratee(),
|
||||||
index = -1;
|
index = -1;
|
||||||
|
|
||||||
iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });
|
iteratees = arrayMap(iteratees.length ? iteratees : Array(1), function(iteratee) {
|
||||||
|
return toIteratee(iteratee);
|
||||||
|
});
|
||||||
|
|
||||||
var result = baseMap(collection, function(value) {
|
var result = baseMap(collection, function(value, key, collection) {
|
||||||
var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });
|
var criteria = arrayMap(iteratees, function(iteratee) {
|
||||||
|
return iteratee(value, key, collection);
|
||||||
|
});
|
||||||
return { 'criteria': criteria, 'index': ++index, 'value': value };
|
return { 'criteria': criteria, 'index': ++index, 'value': value };
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -6822,67 +6826,22 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an array of elements, sorted in ascending order by the results of
|
* Creates an array of elements, sorted in ascending order by the results of
|
||||||
* running each element in a collection through `iteratee`. This method performs
|
* running each element in a collection through each iteratee. This method
|
||||||
* a stable sort, that is, it preserves the original sort order of equal elements.
|
* performs a stable sort, that is, it preserves the original sort order of
|
||||||
* The iteratee is invoked with three arguments: (value, index|key, collection).
|
* equal elements. The iteratee is invoked with three arguments:
|
||||||
|
* (value, index|key, collection).
|
||||||
*
|
*
|
||||||
* @static
|
* @static
|
||||||
* @memberOf _
|
* @memberOf _
|
||||||
* @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} [iteratee=_.identity] The function invoked per iteration.
|
* @param {...(Function|Function[]|Object|Object[]|string|string[])} [iteratees=[_.identity]]
|
||||||
* @returns {Array} Returns the new sorted array.
|
|
||||||
* @example
|
|
||||||
*
|
|
||||||
* _.sortBy([1, 2, 3], function(n) {
|
|
||||||
* return Math.sin(n);
|
|
||||||
* });
|
|
||||||
* // => [3, 1, 2]
|
|
||||||
*
|
|
||||||
* _.sortBy([1, 2, 3], function(n) {
|
|
||||||
* return this.sin(n);
|
|
||||||
* }, Math);
|
|
||||||
* // => [3, 1, 2]
|
|
||||||
*
|
|
||||||
* var users = [
|
|
||||||
* { 'user': 'fred' },
|
|
||||||
* { 'user': 'pebbles' },
|
|
||||||
* { 'user': 'barney' }
|
|
||||||
* ];
|
|
||||||
*
|
|
||||||
* // using the `_.property` callback shorthand
|
|
||||||
* _.map(_.sortBy(users, 'user'), 'user');
|
|
||||||
* // => ['barney', 'fred', 'pebbles']
|
|
||||||
*/
|
|
||||||
function sortBy(collection, iteratee, thisArg) {
|
|
||||||
if (collection == null) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
|
|
||||||
iteratee = undefined;
|
|
||||||
}
|
|
||||||
var index = -1;
|
|
||||||
iteratee = getIteratee(iteratee, thisArg, 3);
|
|
||||||
|
|
||||||
var result = baseMap(collection, function(value, key, collection) {
|
|
||||||
return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };
|
|
||||||
});
|
|
||||||
return baseSortBy(result, compareAscending);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method is like `_.sortBy` except that it can sort by multiple iteratees
|
|
||||||
* or property names.
|
|
||||||
*
|
|
||||||
* @static
|
|
||||||
* @memberOf _
|
|
||||||
* @category Collection
|
|
||||||
* @param {Array|Object|string} collection The collection to iterate over.
|
|
||||||
* @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees
|
|
||||||
* The iteratees to sort by, specified as individual values or arrays of values.
|
* The iteratees to sort by, specified as individual values or arrays of values.
|
||||||
* @returns {Array} Returns the new sorted array.
|
* @returns {Array} Returns the new sorted array.
|
||||||
* @example
|
* @example
|
||||||
*
|
*
|
||||||
|
* var resolve = _.partial(_.map, _, _.values);
|
||||||
|
*
|
||||||
* var users = [
|
* var users = [
|
||||||
* { 'user': 'fred', 'age': 48 },
|
* { 'user': 'fred', 'age': 48 },
|
||||||
* { 'user': 'barney', 'age': 36 },
|
* { 'user': 'barney', 'age': 36 },
|
||||||
@@ -6890,8 +6849,6 @@
|
|||||||
* { 'user': 'barney', 'age': 34 }
|
* { 'user': 'barney', 'age': 34 }
|
||||||
* ];
|
* ];
|
||||||
*
|
*
|
||||||
* var resolve = _.partial(_.map, _, _.values);
|
|
||||||
*
|
|
||||||
* resolve( _.sortBy(users, function(o) { return o.user; }) );
|
* resolve( _.sortBy(users, function(o) { return o.user; }) );
|
||||||
* // => // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
|
* // => // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
|
||||||
*
|
*
|
||||||
@@ -6907,8 +6864,10 @@
|
|||||||
if (collection == null) {
|
if (collection == null) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
var guard = iteratees[2];
|
var length = iteratees.length;
|
||||||
if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {
|
if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
|
||||||
|
iteratees = [];
|
||||||
|
} else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
|
||||||
iteratees.length = 1;
|
iteratees.length = 1;
|
||||||
}
|
}
|
||||||
return baseSortByOrder(collection, baseFlatten(iteratees), []);
|
return baseSortByOrder(collection, baseFlatten(iteratees), []);
|
||||||
@@ -11560,7 +11519,6 @@
|
|||||||
lodash.shuffle = shuffle;
|
lodash.shuffle = shuffle;
|
||||||
lodash.slice = slice;
|
lodash.slice = slice;
|
||||||
lodash.sortBy = sortBy;
|
lodash.sortBy = sortBy;
|
||||||
lodash.sortByAll = sortByAll;
|
|
||||||
lodash.sortByOrder = sortByOrder;
|
lodash.sortByOrder = sortByOrder;
|
||||||
lodash.spread = spread;
|
lodash.spread = spread;
|
||||||
lodash.take = take;
|
lodash.take = take;
|
||||||
|
|||||||
38
test/test.js
38
test/test.js
@@ -14146,12 +14146,6 @@
|
|||||||
QUnit.module('lodash.sortBy');
|
QUnit.module('lodash.sortBy');
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
function Pair(a, b, c) {
|
|
||||||
this.a = a;
|
|
||||||
this.b = b;
|
|
||||||
this.c = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
var objects = [
|
var objects = [
|
||||||
{ 'a': 'x', 'b': 3 },
|
{ 'a': 'x', 'b': 3 },
|
||||||
{ 'a': 'y', 'b': 4 },
|
{ 'a': 'y', 'b': 4 },
|
||||||
@@ -14159,21 +14153,6 @@
|
|||||||
{ 'a': 'y', 'b': 2 }
|
{ 'a': 'y', 'b': 2 }
|
||||||
];
|
];
|
||||||
|
|
||||||
var stableArray = [
|
|
||||||
new Pair(1, 1, 1), new Pair(1, 2, 1),
|
|
||||||
new Pair(1, 1, 1), new Pair(1, 2, 1),
|
|
||||||
new Pair(1, 3, 1), new Pair(1, 4, 1),
|
|
||||||
new Pair(1, 5, 1), new Pair(1, 6, 1),
|
|
||||||
new Pair(2, 1, 2), new Pair(2, 2, 2),
|
|
||||||
new Pair(2, 3, 2), new Pair(2, 4, 2),
|
|
||||||
new Pair(2, 5, 2), new Pair(2, 6, 2),
|
|
||||||
new Pair(undefined, 1, 1), new Pair(undefined, 2, 1),
|
|
||||||
new Pair(undefined, 3, 1), new Pair(undefined, 4, 1),
|
|
||||||
new Pair(undefined, 5, 1), new Pair(undefined, 6, 1)
|
|
||||||
];
|
|
||||||
|
|
||||||
var stableObject = _.zipObject('abcdefghijklmnopqrst'.split(''), stableArray);
|
|
||||||
|
|
||||||
test('should sort in ascending order', 1, function() {
|
test('should sort in ascending order', 1, function() {
|
||||||
var actual = _.map(_.sortBy(objects, function(object) {
|
var actual = _.map(_.sortBy(objects, function(object) {
|
||||||
return object.b;
|
return object.b;
|
||||||
@@ -14182,16 +14161,6 @@
|
|||||||
deepEqual(actual, [1, 2, 3, 4]);
|
deepEqual(actual, [1, 2, 3, 4]);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should perform a stable sort (test in V8)', 2, function() {
|
|
||||||
_.each([stableArray, stableObject], function(value, index) {
|
|
||||||
var actual = _.sortBy(value, function(pair) {
|
|
||||||
return pair.a;
|
|
||||||
});
|
|
||||||
|
|
||||||
deepEqual(actual, stableArray, index ? 'object' : 'array');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('should provide the correct `iteratee` arguments', 1, function() {
|
test('should provide the correct `iteratee` arguments', 1, function() {
|
||||||
var args;
|
var args;
|
||||||
|
|
||||||
@@ -14286,7 +14255,7 @@
|
|||||||
|
|
||||||
QUnit.module('sortBy methods');
|
QUnit.module('sortBy methods');
|
||||||
|
|
||||||
_.each(['sortByAll', 'sortByOrder'], function(methodName) {
|
_.each(['sortBy', 'sortByOrder'], function(methodName) {
|
||||||
var func = _[methodName];
|
var func = _[methodName];
|
||||||
|
|
||||||
function Pair(a, b, c) {
|
function Pair(a, b, c) {
|
||||||
@@ -17548,7 +17517,6 @@
|
|||||||
'sample',
|
'sample',
|
||||||
'shuffle',
|
'shuffle',
|
||||||
'sortBy',
|
'sortBy',
|
||||||
'sortByAll',
|
|
||||||
'sortByOrder',
|
'sortByOrder',
|
||||||
'take',
|
'take',
|
||||||
'times',
|
'times',
|
||||||
@@ -17563,7 +17531,7 @@
|
|||||||
|
|
||||||
var acceptFalsey = _.difference(allMethods, rejectFalsey);
|
var acceptFalsey = _.difference(allMethods, rejectFalsey);
|
||||||
|
|
||||||
test('should accept falsey arguments', 207, function() {
|
test('should accept falsey arguments', 205, function() {
|
||||||
var emptyArrays = _.map(falsey, _.constant([]));
|
var emptyArrays = _.map(falsey, _.constant([]));
|
||||||
|
|
||||||
_.each(acceptFalsey, function(methodName) {
|
_.each(acceptFalsey, function(methodName) {
|
||||||
@@ -17599,7 +17567,7 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should return an array', 68, function() {
|
test('should return an array', 66, function() {
|
||||||
var array = [1, 2, 3];
|
var array = [1, 2, 3];
|
||||||
|
|
||||||
_.each(returnArrays, function(methodName) {
|
_.each(returnArrays, function(methodName) {
|
||||||
|
|||||||
Reference in New Issue
Block a user