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

9voto

shekhardtu Punkte 3162

Am einfachsten ist die Überprüfung

"key" in object

zum Beispiel:

var obj = {
  a: 1,
  b: 2,
}
"a" in obj // true
"c" in obj // false

Rückgabewert als wahr impliziert, dass der Schlüssel im Objekt vorhanden ist.

6voto

Alex Punkte 708

Wenn Sie nach einem beliebigen Schlüssel in einer beliebigen Tiefe eines Objekts suchen und falsche Werte berücksichtigen wollen, sollten Sie diese Zeile für eine Hilfsfunktion in Betracht ziehen:

var keyExistsOn = (o, k) => k.split(".").reduce((a, c) => a.hasOwnProperty(c) ? a[c] || 1 : false, Object.assign({}, o)) === false ? false : true;

Ergebnisse

var obj = {
    test: "",
    locals: {
        test: "",
        test2: false,
        test3: NaN,
        test4: 0,
        test5: undefined,
        auth: {
            user: "hw"
        }
    }
}

keyExistsOn(obj, "")
> false
keyExistsOn(obj, "locals.test")
> true
keyExistsOn(obj, "locals.test2")
> true
keyExistsOn(obj, "locals.test3")
> true
keyExistsOn(obj, "locals.test4")
> true
keyExistsOn(obj, "locals.test5")
> true
keyExistsOn(obj, "sdsdf")
false
keyExistsOn(obj, "sdsdf.rtsd")
false
keyExistsOn(obj, "sdsdf.234d")
false
keyExistsOn(obj, "2134.sdsdf.234d")
false
keyExistsOn(obj, "locals")
true
keyExistsOn(obj, "locals.")
false
keyExistsOn(obj, "locals.auth")
true
keyExistsOn(obj, "locals.autht")
false
keyExistsOn(obj, "locals.auth.")
false
keyExistsOn(obj, "locals.auth.user")
true
keyExistsOn(obj, "locals.auth.userr")
false
keyExistsOn(obj, "locals.auth.user.")
false
keyExistsOn(obj, "locals.auth.user")
true

Siehe auch dieses NPM-Paket: https://www.npmjs.com/package/has-deep-value

6voto

Rupam Punkte 1392

Ein alternativer Ansatz mit "Reflect"

Gemäß MDN

Reflect ist ein eingebautes Objekt, das Methoden für abnehmbare JavaScript-Operationen bietet.

Die statische Methode Reflect.has() funktioniert wie der Operator in als eine Funktion.

var obj = {
  a: undefined,
  b: 1,
  c: "hello world"
}
console.log(Reflect.has(obj, 'a'))
console.log(Reflect.has(obj, 'b'))
console.log(Reflect.has(obj, 'c'))
console.log(Reflect.has(obj, 'd'))

Soll ich es verwenden?

Das kommt darauf an.

Reflect.has() ist langsamer als die anderen in der akzeptierten Antwort genannten Methoden (laut meinem Benchmark-Test). Aber, wenn Sie es nur ein paar Mal in Ihrem Code verwenden, sehe ich nicht viel Probleme mit diesem Ansatz.

5voto

realappie Punkte 4145

Dabei wird zwar nicht unbedingt geprüft, ob ein Schlüssel existiert, aber es wird geprüft, ob ein Wert wahrheitsgemäß ist. Welche undefined y null fallen unter.

Boolean(obj.foo)

Diese Lösung funktioniert am besten für mich, weil ich typescript verwenden, und mit Zeichenfolgen wie so 'foo' in obj o obj.hasOwnProperty('foo') um zu prüfen, ob ein Schlüssel existiert oder nicht, bietet mir keine Intellisense.

5voto

Mohan Dere Punkte 4067

Wir können - hasOwnProperty.call(obj, key);

El unterstrich.js Weg -

if(_.has(this.options, 'login')){
  //key 'login' exists in this.options 
}

_.has = function(obj, key) {
  return hasOwnProperty.call(obj, key);
};

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