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

15voto

Nice Books Punkte 903

Um herauszufinden, ob ein Schlüssel in einem Objekt existiert, verwenden Sie

Object.keys(obj).includes(key)

Das ES7 enthält Methode prüft, ob ein Array ein Element enthält oder nicht, und ist eine einfachere Alternative zu indexOf .

13voto

Hajji Tarik Punkte 1062

Vanila js

yourObjName.hasOwnProperty(key) : true ? false;

Wenn Sie prüfen möchten, ob das Objekt mindestens eine Eigenschaft in es2015 hat

Object.keys(yourObjName).length : true ? false

13voto

kind user Punkte 34477

ES6-Lösung

mit Array#some y Object.keys . Es wird zurückgegeben wahr wenn der angegebene Schlüssel im Objekt existiert oder falsch wenn nicht.

var obj = {foo: 'one', bar: 'two'};

function isKeyInObject(obj, key) {
    var res = Object.keys(obj).some(v => v == key);
    console.log(res);
}

isKeyInObject(obj, 'foo');
isKeyInObject(obj, 'something');

Einzeiliges Beispiel.

console.log(Object.keys({foo: 'one', bar: 'two'}).some(v => v == 'foo'));

1 Stimmen

Bei nicht aufzählbaren Eigenschaften des Objekts schlägt es fehl.

0 Stimmen

@Sid Gib mir ein Beispiel.

0 Stimmen

So geht's. let joshua = { name: 'Joshua', address: 'London' }; Object.defineProperty(joshua, 'isMarried', { value: true, enumerable: false}); console.log('isMarried' in Object.keys(joshua))

13voto

vsync Punkte 101339

Optionaler Verkettungsoperator :

const invoice = {customer: {address: {city: "foo"}}}

console.log( invoice?.customer?.address?.city )
console.log( invoice?.customer?.address?.street )
console.log( invoice?.xyz?.address?.city )

_Siehe Liste der unterstützten Browser_


Für diejenigen, die lodash in ihr Projekt aufgenommen:

Es gibt eine Lodash _.get Methode, die versucht, "tiefe" Schlüssel zu erhalten:

Ermittelt den Wert am Pfad des Objekts. Wenn der aufgelöste Wert undefiniert ist, wird an seiner Stelle der Standardwert zurückgegeben.

var object = { 'a': [{ 'b': { 'c': 3 } }] };

console.log(
  _.get(object, 'a[0].b.c'),           // => 3
  _.get(object, ['a', '0', 'b', 'c']), // => 3
  _.get(object, 'a.b.c'),              // => undefined 
  _.get(object, 'a.b.c', 'default')    // => 'default'
)

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

Damit wird überprüft, ob dieser Schlüssel, wie auch immer tief definiert ist und wird nicht einen Fehler auslösen, der den Ablauf Ihres Programms beeinträchtigen kann, wenn dieser Schlüssel nicht definiert ist.

10voto

Aditya Rewari Punkte 1722

Optionale Verkettung ( ?. ) Operator kann auch dafür verwendet werden

Fuente: MDN/Operators/Optional_chaining

const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah'
  }
}

console.log(adventurer.dog?.name) // undefined
console.log(adventurer.cat?.name) // Dinah

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