Re-optimize _.max, _.min, and _.sortedIndex.

Former-commit-id: 7f449a4fde6777f14a1def0d767f2926bdea07c9
This commit is contained in:
John-David Dalton
2012-10-09 00:17:10 -07:00
parent fff8d5f07d
commit 6fdce4ad0d

View File

@@ -697,8 +697,8 @@
'top': '', 'top': '',
'useHas': true, 'useHas': true,
'useStrict': isStrictFast, 'useStrict': isStrictFast,
'arrayBranch': {}, 'arrayBranch': { 'beforeLoop': '' },
'objectBranch': {} 'objectBranch': { 'beforeLoop': '' }
}; };
var object, var object,
@@ -2688,6 +2688,7 @@
length = array ? array.length : 0, length = array ? array.length : 0,
result = computed; result = computed;
if (callback) {
callback = createCallback(callback, thisArg); callback = createCallback(callback, thisArg);
while (++index < length) { while (++index < length) {
var current = callback(array[index], index, array); var current = callback(array[index], index, array);
@@ -2696,6 +2697,13 @@
result = array[index]; result = array[index];
} }
} }
} else {
while (++index < length) {
if (array[index] > result) {
result = array[index];
}
}
}
return result; return result;
} }
@@ -2723,6 +2731,7 @@
length = array ? array.length : 0, length = array ? array.length : 0,
result = computed; result = computed;
if (callback) {
callback = createCallback(callback, thisArg); callback = createCallback(callback, thisArg);
while (++index < length) { while (++index < length) {
var current = callback(array[index], index, array); var current = callback(array[index], index, array);
@@ -2731,6 +2740,13 @@
result = array[index]; result = array[index];
} }
} }
} else {
while (++index < length) {
if (array[index] < result) {
result = array[index];
}
}
}
return result; return result;
} }
@@ -2912,12 +2928,19 @@
var low = 0, var low = 0,
high = array ? array.length : low; high = array ? array.length : low;
if (callback) {
callback = createCallback(callback, thisArg); callback = createCallback(callback, thisArg);
value = callback(value); value = callback(value);
while (low < high) { while (low < high) {
var mid = (low + high) >>> 1; var mid = (low + high) >>> 1;
callback(array[mid]) < value ? low = mid + 1 : high = mid; callback(array[mid]) < value ? low = mid + 1 : high = mid;
} }
} else {
while (low < high) {
var mid = (low + high) >>> 1;
array[mid] < value ? low = mid + 1 : high = mid;
}
}
return low; return low;
} }