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,12 +2688,20 @@
length = array ? array.length : 0, length = array ? array.length : 0,
result = computed; result = computed;
callback = createCallback(callback, thisArg); if (callback) {
while (++index < length) { callback = createCallback(callback, thisArg);
var current = callback(array[index], index, array); while (++index < length) {
if (current > computed) { var current = callback(array[index], index, array);
computed = current; if (current > computed) {
result = array[index]; computed = current;
result = array[index];
}
}
} else {
while (++index < length) {
if (array[index] > result) {
result = array[index];
}
} }
} }
return result; return result;
@@ -2723,12 +2731,20 @@
length = array ? array.length : 0, length = array ? array.length : 0,
result = computed; result = computed;
callback = createCallback(callback, thisArg); if (callback) {
while (++index < length) { callback = createCallback(callback, thisArg);
var current = callback(array[index], index, array); while (++index < length) {
if (current < computed) { var current = callback(array[index], index, array);
computed = current; if (current < computed) {
result = array[index]; computed = current;
result = array[index];
}
}
} else {
while (++index < length) {
if (array[index] < result) {
result = array[index];
}
} }
} }
return result; return result;
@@ -2912,11 +2928,18 @@
var low = 0, var low = 0,
high = array ? array.length : low; high = array ? array.length : low;
callback = createCallback(callback, thisArg); if (callback) {
value = callback(value); callback = createCallback(callback, thisArg);
while (low < high) { value = callback(value);
var mid = (low + high) >>> 1; while (low < high) {
callback(array[mid]) < value ? low = mid + 1 : high = mid; var mid = (low + high) >>> 1;
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;
} }