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.

6voto

Mitul Panchal Punkte 496

Sie hat einen Parameter: ein Array mit einer Anzahl von Objekten. Jedes Objekt im Array hat zwei ganzzahlige Eigenschaften, die mit x und y bezeichnet werden. Die Funktion muss eine Anzahl aller Objekte im Array zurückgeben, die folgende Bedingungen erfüllen numbers.x == numbers.y

var numbers = [ { x: 1, y: 1 },
                { x: 2, y: 3 },
                { x: 3, y: 3 },
                { x: 3, y: 4 },
                { x: 4, y: 5 } ];
var count = 0; 
var n = numbers.length;
for (var i =0;i<n;i++)
{
  if(numbers[i].x==numbers[i].y)
    {count+=1;}
}

alert(count);

0 Stimmen

Wie würden Sie den Wert von x mit dem Wert des nächsten Elements x vergleichen? Das funktioniert nicht: for (var i = 0; i < n; i++) { if (numbers[i].x == (numbers[i] + 1).x) { count += 1; } }

6voto

da coconut Punkte 710

Verwenden. Array.prototype.includes zum Beispiel:

const fruits = ['coconut', 'banana', 'apple']

const doesFruitsHaveCoconut = fruits.includes('coconut')// true

console.log(doesFruitsHaveCoconut)

lesen Sie vielleicht diese Dokumentation von MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes

5voto

Riwaj Chalise Punkte 487

indexOf() verwenden

Sie können die Methode indexOf() verwenden, um zu prüfen, ob ein bestimmter Wert oder ein bestimmtes Element in einem Array vorhanden ist oder nicht. Die indexOf()-Methode gibt den Index des Elements innerhalb des Arrays zurück, wenn es gefunden wurde, und gibt -1 zurück, wenn es nicht gefunden wurde. Schauen wir uns das folgende Beispiel an:

var fruits = ["Apple", "Banana", "Mango", "Orange", "Papaya"];
var a = "Mango";
checkArray(a, fruits);

function checkArray(a, fruits) {
  // Check if a value exists in the fruits array
  if (fruits.indexOf(a) !== -1) {
    return document.write("true");
  } else {
    return document.write("false");
  }
}

Methode include() verwenden

Mit ES6 wurde die Methode includes() eingeführt, mit der diese Aufgabe sehr einfach erledigt werden kann. Diese Methode gibt jedoch nur true oder false anstelle der Indexnummer zurück:

var fruits = ["Apple", "Banana", "Mango", "Orange", "Papaya"];
alert(fruits.includes("Banana")); // Outputs: true
alert(fruits.includes("Coconut")); // Outputs: false
alert(fruits.includes("Orange")); // Outputs: true
alert(fruits.includes("Cherry")); // Outputs: false

Weitere Informationen finden Sie unter aquí

5voto

Ken Punkte 5007

So geht's Prototyp macht es :

/**
 *  Array#indexOf(item[, offset = 0]) -> Number
 *  - item (?): A value that may or may not be in the array.
 *  - offset (Number): The number of initial items to skip before beginning the
 *      search.
 *
 *  Returns the position of the first occurrence of `item` within the array &mdash; or
 *  `-1` if `item` doesn't exist in the array.
**/
function indexOf(item, i) {
  i || (i = 0);
  var length = this.length;
  if (i < 0) i = length + i;
  for (; i < length; i++)
    if (this[i] === item) return i;
  return -1;
}

Siehe auch aquí wie sie die Verbindung herstellen.

5voto

Krishna Ganeriwal Punkte 1743
  1. Entweder verwenden Sie Array.indexOf(Object) .
  2. Mit ECMA 7 kann man die Array.includes(Object) .
  3. Mit ECMA 6 können Sie Array.find(FunctionName) donde FunctionName ist ein Benutzer eine benutzerdefinierte Funktion zur Suche nach dem Objekt im Array.

    Ich hoffe, das hilft!

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