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?
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?
In meinem Fall wollte ich ein NLP-Metadatum überprüfen, das von LUIS zurückgegeben wurde und ein Objekt ist. Ich wollte prüfen, ob ein Schlüssel, der aus der Zeichenkette "FinancialRiskIntent" besteht, als Schlüssel in diesem Metadatenobjekt existiert.
data.meta.prediction.intents
(nur für meine Zwecke, Ihre könnten ein beliebiges Objekt sein)Ich habe folgenden Code verwendet, um zu prüfen, ob der Schlüssel existiert:
const hasKey = 'FinancialRiskIntent' in data.meta.prediction.intents;
if(hasKey) { console.log('The key exists.'); } else { console.log('The key does not exist.'); }
Hier wird nach einem bestimmten Schlüssel gesucht, nach dem ich ursprünglich gesucht habe.
Ich hoffe, dieser Teil hilft jemandem.
Wenn Sie ESLint in Ihrem Projekt konfiguriert haben, folgt die ESLint-Regel no-prototype-builtins . Der Grund dafür ist in dem folgenden Link beschrieben:
// bad
console.log(object.hasOwnProperty(key));
// good
console.log(Object.prototype.hasOwnProperty.call(object, key));
// best
const has = Object.prototype.hasOwnProperty; // cache the lookup once, in module scope.
console.log(has.call(object, key));
/* or */
import has from 'has'; // https://www.npmjs.com/package/has
console.log(has(object, key));
Anhand dieser Beispiele lassen sich die Unterschiede zwischen den verschiedenen Möglichkeiten aufzeigen. Ich hoffe, sie helfen Ihnen, die richtige Methode für Ihre Bedürfnisse zu finden:
// Lets create object `a` using create function `A`
function A(){};
A.prototype.onProtDef=2;
A.prototype.onProtUndef=undefined;
var a=new A();
a.ownProp = 3;
a.ownPropUndef = undefined;
// Let's try different methods:
a.onProtDef; // 2
a.onProtUndef; // undefined
a.ownProp; // 3
a.ownPropUndef; // undefined
a.whatEver; // undefined
a.valueOf; // ƒ valueOf() { [native code] }
a.hasOwnProperty('onProtDef'); // false
a.hasOwnProperty('onProtUndef'); // false
a.hasOwnProperty('ownProp'); // true
a.hasOwnProperty('ownPropUndef'); // true
a.hasOwnProperty('whatEver'); // false
a.hasOwnProperty('valueOf'); // false
'onProtDef' in a; // true
'onProtUndef' in a; // true
'ownProp' in a; // true
'ownPropUndef' in a; // true
'whatEver' in a; // false
'valueOf' in a; // true (on the prototype chain - Object.valueOf)
Object.keys(a); // ["ownProp", "ownPropUndef"]
Eine schnelle und einfache Lösung ist es, Ihr Objekt in json zu konvertieren, dann können Sie diese einfache Aufgabe erledigen:
const allowed = {
'/login' : '',
'/register': '',
'/resetpsw': ''
};
console.log('/login' in allowed); //returns true
Wenn Sie ein Array verwenden, wird der Objektschlüssel in Ganzzahlen umgewandelt (z. B. 0, 1, 2, 3 usw.), so dass er immer falsch ist.
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.
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