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

1voto

Gel Punkte 2476

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.

  1. Ich habe versucht, das zu prüfende verschachtelte Objekt anzuvisieren -> data.meta.prediction.intents (nur für meine Zwecke, Ihre könnten ein beliebiges Objekt sein)
  2. 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.

0voto

Anupam Maurya Punkte 1499
const rawObject = {};
rawObject.propertyKey = 'somethingValue';

console.log(rawObject.hasOwnProperty('somethingValue'));
// expected output: true

Prüfung eines bestimmten Schlüssels in einem bestimmten Objekt, hasOwnProperty wird hier funktionieren.

0voto

nos nart Punkte 1214

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));

0voto

Alexander Punkte 6666

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"]

-1voto

jerryurenaa Punkte 2450

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.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