Erstens: Umsetzung indexOf
in JavaScript für Browser, die diese Funktion noch nicht haben. Zum Beispiel, siehe Erik Arvidssons Aufgebot an Extras (auch die zugehöriger Blogbeitrag ). Und dann können Sie indexOf
ohne sich um die Browserunterstützung zu kümmern. Hier ist eine leicht optimierte Version von ihm indexOf
Umsetzung:
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (obj, fromIndex) {
if (fromIndex == null) {
fromIndex = 0;
} else if (fromIndex < 0) {
fromIndex = Math.max(0, this.length + fromIndex);
}
for (var i = fromIndex, j = this.length; i < j; i++) {
if (this[i] === obj)
return i;
}
return -1;
};
}
Es wurde geändert, um die Länge zu speichern, so dass sie nicht bei jeder Iteration nachgeschlagen werden muss. Aber der Unterschied ist nicht groß. Eine weniger universell einsetzbare Funktion könnte schneller sein:
var include = Array.prototype.indexOf ?
function(arr, obj) { return arr.indexOf(obj) !== -1; } :
function(arr, obj) {
for(var i = -1, j = arr.length; ++i < j;)
if(arr[i] === obj) return true;
return false;
};
Ich ziehe es vor, die Standardfunktion zu verwenden und diese Art von Mikro-Optimierung nur dann vorzunehmen, wenn sie wirklich benötigt wird. Aber wenn Sie an der Mikro-Optimierung interessiert sind, habe ich die Benchmarks die roosterononacid in den Kommentaren verlinkt hat, zu Benchmark-Suche in Arrays . Eine vollständige Untersuchung würde Arrays mit verschiedenen Typen und Längen testen und Objekte finden, die an verschiedenen Orten vorkommen.