4952 Stimmen

Wie prüfe ich, ob ein Array einen Wert in JavaScript enthält?

Wie kann man am einfachsten und effizientesten herausfinden, ob ein JavaScript-Array einen Wert enthält?

Das ist die einzige Möglichkeit, die ich kenne:

function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] === obj) {
            return true;
        }
    }
    return false;
}

Gibt es eine bessere und prägnantere Möglichkeit, dies zu erreichen?

65 Stimmen

Gerade getestet: Ihr Weg ist tatsächlich der schnellste für alle Browser: jsperf.com/find-element-in-obj-vs-array/2 (abgesehen von der Vorabspeicherung von a.length in einer Variablen), während die Verwendung von indexOf (wie in $.inArray) viel langsamer ist

23 Stimmen

Viele haben geantwortet, dass die Array#indexOf ist Ihre beste Wahl hier. Aber wenn Sie etwas wollen, das korrekt in Boolean umgewandelt werden kann, verwenden Sie dies: ~[1,2,3].indexOf(4) wird 0 zurückgeben, was als falsch ausgewertet wird, während ~[1,2,3].indexOf(3) wird -3 zurückgeben, was als wahr ausgewertet wird.

13 Stimmen

~ ist nicht das, was Sie für die Konvertierung in einen Booleschen Wert verwenden wollen, dafür brauchen Sie ! . Aber in diesem Fall wollen Sie die Gleichheit mit -1 prüfen, damit die Funktion nicht endet return [1,2,3].indexOf(3) === -1; ~ nicht binär ist, wird jedes Bit des Wertes einzeln invertiert.

36voto

AlonL Punkte 5672

Einzeiler:

function contains(arr, x) {
    return arr.filter(function(elem) { return elem == x }).length > 0;
}

14 Stimmen

array.filter(e=>e==x).length > 0 ist gleichbedeutend mit array.some(e=>e==x) sondern some ist effizienter

35voto

MattMcKnight Punkte 8064

Wenn Sie diesen Anruf viele Male tätigen, ist es weitaus effizienter, die folgende Methode zu verwenden ein assoziatives Array eine Map zum Nachschlagen mit einer Hash-Funktion.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

27voto

Eduardo Cuomo Punkte 15791

Ich verwende das Folgende:

Array.prototype.contains = function (v) {
    return this.indexOf(v) > -1;
}

var a = [ 'foo', 'bar' ];

a.contains('foo'); // true
a.contains('fox'); // false

24voto

dansalmo Punkte 10858
function contains(a, obj) {
    return a.some(function(element){return element == obj;})
}

Array.prototype.some() wurde in der 5. Ausgabe der ECMA-262-Norm hinzugefügt

0 Stimmen

Wenn Sie es6 verwenden, wird es wie folgt gekürzt contains = (a, obj) => a.some((element) => element === obj))

0 Stimmen

Sogar IE9 hat Unterstützung für Array.prototype.some() ab dem ECMAScript 5 .

23voto

Ran Turner Punkte 8004

Es gibt eine Reihe von Methoden, mit denen dies leicht zu erreichen ist ( includes , some , find , findIndex )

const array = [1, 2, 3, 4, 5, 6, 7];

console.log(array.includes(3));
//includes() determines whether an array includes a certain value among its entries

console.log(array.some(x => x === 3)); 
//some() tests if at least one element in the array passes the test implemented by the provided function

console.log(array.find(x => x === 3) ? true : false);
//find() returns the value of the first element in the provided array that satisfies the provided testing function

console.log(array.findIndex(x => x === 3) > -1 ? true : false);
//findIndex() returns the index of the first element in the array that satisfies the provided testing function, else returning -1.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X