Sie nichts fehlen. Es ist irgendwie überraschend, nicht wahr?
Google Closure Bibliothek tut Support-Funktionen innerhalb von binarysearch (Ich bin sicher, es gibt andere):
http://docs.closure-library.googlecode.com/git/namespace_goog_array.html
Sie würden es verwenden, wie Sie sich vorstellen würde:
var myArray = getPetArray();
goog.array.binarySearch(myArray, 'fido', function(pet) { return pet.name; });
Wenn Sie nicht noch eine andere Bibliothek ziehen möchten, ist die Quelle kurz und verfügbar:
http://docs.closure-library.googlecode.com/git/local_closure_goog_array_array.js.source.html#line989
Ich schneide und den wichtigen Teil hier bei Links Änderung einfügen - nur nicht vergessen, Kredit zu Google geben:
goog.array.binarySearch = function(arr, target, opt_compareFn) {
return goog.array.binarySearch_(arr,
opt_compareFn || goog.array.defaultCompare, false /* isEvaluator */,
target);
};
goog.array.binarySearch_ = function(arr, compareFn, isEvaluator, opt_target,
opt_selfObj) {
var left = 0; // inclusive
var right = arr.length; // exclusive
var found;
while (left < right) {
var middle = (left + right) >> 1;
var compareResult;
if (isEvaluator) {
compareResult = compareFn.call(opt_selfObj, arr[middle], middle, arr);
} else {
compareResult = compareFn(opt_target, arr[middle]);
}
if (compareResult > 0) {
left = middle + 1;
} else {
right = middle;
// We are looking for the lowest index so we can't return immediately.
found = !compareResult;
}
}
// left is the index if found, or the insertion point otherwise.
// ~left is a shorthand for -left - 1.
return found ? left : ~left;
};
goog.array.defaultCompare = function(a, b) {
return a > b ? 1 : a < b ? -1 : 0;
};
Neugierig: was Sie tun, dass eine binäre Suche den Unterschied zwischen lenkbar und inakzeptabel macht? Wie groß ist Ihr Array und was machen Sie damit? –
Eine binäre Suche muss in einem sortierten Array durchgeführt werden. Da Sie ein Array von Objekten haben, benötigen Sie höchstwahrscheinlich eine benutzerdefinierte Lösung. –
Das Array selbst ist etwa 1000 Elemente, aber ich muss viele Elemente darin finden. Eine lineare Suche dieses Arrays in einer Schleife ist daher möglicherweise nicht sehr effizient. – Naresh