Prüfen, ob ein Element in einem Array vorhanden ist

Die Funktion, die ich jetzt verwende, um dies zu überprüfen, ist die folgende:

function inArray(needle,haystack)
{
    var count=haystack.length;
    for(var i=0;i<count;i++)
    {
        if(haystack[i]===needle){return true;}
    }
    return false;
}

Sie funktioniert. Ich möchte wissen, ob es einen besseren Weg gibt, dies zu tun.

Code:

function isInArray(value, array) {
  return array.indexOf(value) > -1;
}

Ausführung:

isInArray(1, [1,2,3]); // true

Aktualisierung (2017):

In modernen Browsern, die dem ECMAScript 2016 (ES7)-Standard folgen, können Sie die Funktion Array.prototype.includes verwenden, mit der Sie viel einfacher überprüfen können, ob ein Element in einem Array vorhanden ist:

const array = [1, 2, 3];
const value = 1;
const isInArray = array.includes(value);
console.log(isInArray); // true
Kommentare (7)

Verwenden Sie einfach indexOf:

haystack.indexOf(needle) >= 0

Wenn Sie alte Internet Explorer (< IE9) unterstützen wollen, müssen Sie Ihren aktuellen Code als Workaround einbinden.

Sofern Ihre Liste nicht sortiert ist, müssen Sie jeden Wert mit der Nadel vergleichen. Daher müssen sowohl Ihre Lösung als auch indexOf im Durchschnitt n/2 Vergleiche durchführen. Da indexOf jedoch eine eingebaute Methode ist, kann sie zusätzliche Optimierungen verwenden und wird in der Praxis etwas schneller sein. Beachten Sie, dass der Geschwindigkeitsunterschied keine Rolle spielt, es sei denn, Ihre Anwendung sucht extrem oft in Listen (z.B. 1000 Mal pro Sekunde) oder die Listen sind riesig (z.B. 100k Einträge).

Kommentare (6)

Um dies zu erreichen, können Sie die Funktion _contains aus der underscore.js-Bibliothek verwenden:

if (_.contains(haystack, needle)) {
  console.log("Needle found.");
};
Kommentare (2)