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.

3voto

KRRySS Punkte 181

Die Verwendung von idnexOf() ist eine gute Lösung, aber Sie sollten die eingebettete Implementierung der indexOf()-Funktion, die -1 zurückgibt, mit dem Operator ~ ausblenden:

function include(arr,obj) { 
    return !!(~arr.indexOf(obj)); 
}

3voto

Med Aziz CHETOUI Punkte 111

Die beste Standardmethode zur Überprüfung, ob ein Wert in einem Array vorhanden ist, ist JavaScript some()

Array.prototype.some()

があります。 some() Methode prüft, ob mindestens ein Element im Array den von der angegebenen Funktion implementierten Test besteht. Sie gibt true zurück, wenn sie in dem Array ein Element findet, für das die angegebene Funktion true zurückgibt; andernfalls gibt sie false zurück. Das Array wird dabei nicht verändert.

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

// checks whether an element is even
const even = (element) => element % 2 === 0;

console.log(array.some(even));
// expected output: true

があります。 some Methode ist die beste Methode in Browser-Kompatibilität Browser compatibility

Für weitere Dokumentation Array.prototype.some() - JavaScript | MDN

Sie können auch zwei andere Methoden verwenden find() y includes() . mit diesen Methoden können Sie Ihr Ergebnis erhalten, aber nicht das beste.

Array.prototype.find() - JavaScript | MDN

Array.prototype.includes() - JavaScript | MDN

3voto

Dies kann ein detailliert und einfach Lösung.

//plain array
var arr = ['a', 'b', 'c'];
var check = arr.includes('a');
console.log(check); //returns true
if (check)
{
   // value exists in array
   //write some codes
}

// array with objects
var arr = [
      {x:'a', y:'b'},
      {x:'p', y:'q'}
  ];

// if you want to check if x:'p' exists in arr
var check = arr.filter(function (elm){
    if (elm.x == 'p')
    {
       return elm; // returns length = 1 (object exists in array)
    }
});

// or y:'q' exists in arr
var check = arr.filter(function (elm){
    if (elm.y == 'q')
    {
       return elm; // returns length = 1 (object exists in array)
    }
});

// if you want to check, if the entire object {x:'p', y:'q'} exists in arr
var check = arr.filter(function (elm){
    if (elm.x == 'p' && elm.y == 'q')
    {
       return elm; // returns length = 1 (object exists in array)
    }
});

// in all cases
console.log(check.length); // returns 1

if (check.length > 0)
{
   // returns true
   // object exists in array
   //write some codes
}

3voto

Nitesh Ranjan Punkte 963

Zusätzlich zu dem, was andere gesagt haben, wenn Sie keinen Verweis auf das Objekt haben, das Sie im Array suchen möchten, können Sie etwas wie folgt tun.

let array = [1, 2, 3, 4, {"key": "value"}];

array.some((element) => JSON.stringify(element) === JSON.stringify({"key": "value"})) // true

array.some((element) => JSON.stringify(element) === JSON.stringify({})) // true

Array.some gibt true zurück, wenn ein beliebiges Element die angegebene Bedingung erfüllt, und gibt false zurück, wenn keines der Elemente die angegebene Bedingung erfüllt.

1 Stimmen

Späte Anmerkung: Dies funktioniert nicht mit, sagen wir, contains([{ a: 1, b: 2 }], { b: 2, a: 1 }) da die stringifizierten Objekte die Reihenfolge der Eigenschaften beibehalten.

3voto

Durgpal Singh Punkte 9633

Ich empfahl, underscore Bibliothek zu verwenden, weil seine Rückkehr den Wert und seine für alle Browser unterstützt.

underscorejs

 var findValue = _.find(array, function(item) {
    return item.id == obj.id;
 });

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