mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-11 19:37:49 +00:00
Ensure _.sortedIndex and _.sortedLastIndex align with _.sortBy.
This commit is contained in:
10
lodash.js
10
lodash.js
@@ -428,7 +428,7 @@
|
|||||||
* @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) {
|
||||||
return baseCompareAscending(object.criteria, other.criteria) || object.index - other.index;
|
return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2404,12 +2404,14 @@
|
|||||||
|
|
||||||
while (low < high) {
|
while (low < high) {
|
||||||
var mid = (low + high) >>> 1,
|
var mid = (low + high) >>> 1,
|
||||||
computed = iterator(array[mid]);
|
computed = iterator(array[mid]),
|
||||||
|
setLow = retHighest ? computed <= value : computed < value;
|
||||||
|
|
||||||
if (hintNum && typeof computed != 'undefined') {
|
if (hintNum && typeof computed != 'undefined') {
|
||||||
computed = +computed || 0;
|
computed = +computed;
|
||||||
|
setLow = computed != computed || setLow;
|
||||||
}
|
}
|
||||||
if (retHighest ? computed <= value : computed < value) {
|
if (setLow) {
|
||||||
low = mid + 1;
|
low = mid + 1;
|
||||||
} else {
|
} else {
|
||||||
high = mid;
|
high = mid;
|
||||||
|
|||||||
20
test/test.js
20
test/test.js
@@ -9684,7 +9684,25 @@
|
|||||||
strictEqual(actual, 1);
|
strictEqual(actual, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('`_.' + methodName + '` supports arrays with lengths larger than `Math.pow(2, 31) - 1`', 1, function() {
|
test('`_.' + methodName + '` should align with `_.sortBy`', 8, function() {
|
||||||
|
var array = [NaN, {}, NaN, 1, 2, undefined];
|
||||||
|
deepEqual(_.sortBy(array), array);
|
||||||
|
strictEqual(func(array, 3), 5);
|
||||||
|
|
||||||
|
array = [1, 2, NaN, {}, NaN, undefined];
|
||||||
|
deepEqual(_.sortBy(array), array);
|
||||||
|
strictEqual(func(array, 3), 5);
|
||||||
|
|
||||||
|
array = [NaN, {}, NaN, '1', '2', undefined];
|
||||||
|
deepEqual(_.sortBy(array), array);
|
||||||
|
strictEqual(func(array, '3'), 5);
|
||||||
|
|
||||||
|
array = ['1', '2', NaN, {}, NaN, undefined];
|
||||||
|
deepEqual(_.sortBy(array), array);
|
||||||
|
strictEqual(func(array, '3'), 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('`_.' + methodName + '` should support arrays larger than `Math.pow(2, 31) - 1`', 1, function() {
|
||||||
var length = Math.pow(2, 32) - 1,
|
var length = Math.pow(2, 32) - 1,
|
||||||
index = length - 1,
|
index = length - 1,
|
||||||
array = Array(length),
|
array = Array(length),
|
||||||
|
|||||||
Reference in New Issue
Block a user