4027 Stimmen

Prüfen, ob ein Schlüssel in einem JavaScript-Objekt existiert?

Wie prüfe ich, ob ein bestimmter Schlüssel in einem JavaScript-Objekt oder -Array existiert?

Wenn ein Schlüssel nicht existiert und ich versuche, auf ihn zuzugreifen, wird dann "false" zurückgegeben? Oder wird ein Fehler ausgegeben?

2 Stimmen

Alles (fast alles) in JavaScript ist ein Objekt oder kann in ein Objekt umgewandelt werden. Dies ist, wo pseudo-assoziative Arrays sind geboren, wie @PatrickM wies darauf hin.

0 Stimmen

Dieser Benchmark jsben.ch/#/WqlIl gibt Ihnen einen Überblick über die gebräuchlichsten Methoden, um diese Prüfung zu erreichen.

4 Stimmen

Eine schnelle Abhilfe, normalerweise wähle ich property.key = property.key || 'some default value' nur für den Fall, dass ich möchte, dass dieser Schlüssel mit einem Wert versehen ist

38voto

handle Punkte 5667

El akzeptierte Antwort bezieht sich auf Objekt . Vorsicht bei der Verwendung der in Betreiber en Array um Daten anstelle von Schlüsseln zu finden:

("true" in ["true", "false"])
// -> false (Because the keys of the above Array are actually 0 and 1)

Zum Testen vorhandener Elemente in einem Array: Der beste Weg, um herauszufinden, ob ein Element in einem JavaScript-Array ist?

33voto

Lavi Avigdor Punkte 3792

Drei Möglichkeiten zu prüfen, ob eine Eigenschaft in einem Javascript-Objekt vorhanden ist:

  1. !!obj.theProperty
    Konvertiert Wert in bool. gibt zurück true für alle außer den false Wert
  2. ' theProperty ' in obj
    Gibt true zurück, wenn die Eigenschaft existiert, unabhängig von ihrem Wert (auch wenn sie leer ist)
  3. obj.hasOwnProperty('theProperty')
    Die Prototypenkette wird nicht geprüft. (da alle Objekte die toString Methode, 1 und 2 geben darauf true zurück, während 3 darauf false zurückgeben kann).

Referenz:

http://book.mixu.net/node/ch5.html

0 Stimmen

!!obj.theProperty schlägt fehl, wenn der Wert undefiniert ist. Bsp: var a = {a : undefined, b : null}; !!a.a **will return false**

3 Stimmen

Aus der Rezension: !!obj.theProperty ist keine Lösung, um zu prüfen, ob ein Objekt eine Eigenschaft namens theProperty . Es schlägt bei jedem falschen Eigenschaftswert fehl, undefined , null, numerisch 0 o NaN und die leere Zeichenkette ""

19voto

vatsal Punkte 3615

Wenn Sie Folgendes verwenden unterstrich.js Bibliothek werden Objekt/Array-Operationen einfach.

In Ihrem Fall kann die Methode _.has verwendet werden. Beispiel:

yourArray = {age: "10"}

_.has(yourArray, "age")

gibt zurück. wahr

Aber,

_.has(yourArray, "invalidKey")

gibt zurück. falsch

18voto

Webeng Punkte 6746

Antwort:

if ("key" in myObj)
{
    console.log("key exists!");
}
else
{
    console.log("key doesn't exist!");
}

Erläuterung:

El in Operator prüft, ob der Schlüssel im Objekt vorhanden ist. Wenn Sie geprüft haben, ob der Wert undefiniert ist: if (myObj["key"] === 'undefined') können Sie auf Probleme stoßen, weil in Ihrem Objekt möglicherweise ein Schlüssel mit der undefined Wert.

Aus diesem Grund ist es viel besser, zunächst die in Operator und vergleichen Sie dann den Wert, der sich innerhalb des Schlüssels befindet, sobald Sie wissen, dass er existiert.

16voto

jaredwilli Punkte 11094

Hier ist eine Hilfsfunktion, die ich sehr nützlich finde

Este keyExists(key, search) kann zum einfachen Nachschlagen eines Schlüssels in Objekten oder Arrays verwendet werden!

Übergeben Sie einfach den Schlüssel, den Sie suchen, und suchen Sie obj (das Objekt oder Array), in dem Sie ihn finden wollen.

function keyExists(key, search) {
        if (!search || (search.constructor !== Array && search.constructor !== Object)) {
            return false;
        }
        for (var i = 0; i < search.length; i++) {
            if (search[i] === key) {
                return true;
            }
        }
        return key in search;
    }

// How to use it:
// Searching for keys in Arrays
console.log(keyExists('apple', ['apple', 'banana', 'orange'])); // true
console.log(keyExists('fruit', ['apple', 'banana', 'orange'])); // false

// Searching for keys in Objects
console.log(keyExists('age', {'name': 'Bill', 'age': 29 })); // true
console.log(keyExists('title', {'name': 'Jason', 'age': 29 })); // false

Es ist ziemlich zuverlässig und funktioniert browserübergreifend gut.

8 Stimmen

Dies scheint ein wenig verwirrt: Erstens, wenn die Suche ein Array diese Methode ist für eine Wert und nicht ein Schlüssel. Zweitens, warum sollte man ein Array auf diese Weise durchlaufen, wenn man die eingebaute Array.indexOf Methode? (wenn Sie nach einem Wert suchen, das heißt)

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