Überprüfen, ob in einem JS-Objekt ein Schlüssel vorhanden ist

86

Ich habe das folgende JavaScript-Objekt:

var obj = {
    "key1" : val,
    "key2" : val,
    "key3" : val
}

Gibt es eine Möglichkeit, zu überprüfen, ob ein ähnlicher Schlüssel im Array vorhanden ist?

testArray = jQuery.inArray("key1", obj);

funktioniert nicht.

Muss ich das Objekt so durchlaufen?

jQuery.each(obj, function(key,val)){}
user2065483
quelle
4
js - Objektliteral :) (nicht jQuery-Objekt)
funerr
True;) zeigt, dass ich keinen js-Hintergrund habe - angefangen von Anfang an mit der jQuery-Bibliothek, und ich glaube, ich muss die Grundlagen lernen ...
user2065483
obj.has("key1")funktioniert, wenn Sie ES6 verwenden.
Diablo
1
@ Diablo Ich denke du versuchst zu sagen obj.hasOwnProperty("key1")anstatt nur has?
Aminu Kano

Antworten:

170

Verwenden Sie den inOperator :

testArray = 'key1' in obj;

Nebenbemerkung: Was Sie dort bekommen haben, ist eigentlich kein jQuery-Objekt, sondern nur ein einfaches JavaScript-Objekt.

Sirko
quelle
3
Können wir das nicht so überprüfen in?
SagarPPanchal
4
@SagarPanchal Was meinst du? So etwas wie testArray = !( 'key1' in obj);?
Sirko
47

Das ist kein jQuery-Objekt, es ist nur ein Objekt.

Mit der hasOwnProperty-Methode können Sie nach einem Schlüssel suchen:

if (obj.hasOwnProperty("key1")) {
  ...
}
Guffa
quelle
du solltest es nicht benutzen. es soll langsam sein. Der beste Weg ist, 'Schlüssel' im Objekt zu verwenden
hannad rehman
@hannadrehman Kannst du mir einen Verweis auf das Dokument / den Artikel geben, in dem es erwähnt wird? :)
Nabin
1
@Fan_of_Martijn_Pieters Ich folge dem strengen ESlint-Regelsatz. es wird dort als eine der Regeln erwähnt. eslint.org/docs/rules/no-prototype-builtins
hannad rehman
@hannadrehman Verwenden Sie das Key-In-Objekt nicht, es kann einfach falsch sein, dies ist der beste Weg.
Downvoted, da dies beim Erkennen von Schlüsseln mit einem Nullwert nicht funktioniert. Wenn beispielsweise der Wert von obj ["key1"] == null ist (also existiert key1 in obj und sein Wert ist null), gibt dies ein falsches Ergebnis zurück, dass key1 nicht in obj ist.
user1258361
7
var obj = {
    "key1" : "k1",
    "key2" : "k2",
    "key3" : "k3"
};

if ("key1" in obj)
    console.log("has key1 in obj");

================================================== =======================

Zugriff auf einen untergeordneten Schlüssel eines anderen Schlüssels

var obj = {
    "key1": "k1",
    "key2": "k2",
    "key3": "k3",
    "key4": {
        "keyF": "kf"
    }
};

if ("keyF" in obj.key4)
    console.log("has keyF in obj");
Fernando_Jr
quelle
1
Oder wenn kein Schlüssel1 ..if (!("key1" in obj)) { console.log("no key1 in obj"); }
Hastig Zusammenstellen
3

Die obigen Antworten sind gut. Aber das ist auch gut und nützlich.

!obj['your_key']  // if 'your_key' not in obj the result --> true

Es ist gut für kurze Codestile, insbesondere für if-Anweisungen:

if (!obj['your_key']){
    // if 'your_key' not exist in obj
    console.log('key not in obj');
} else {
    // if 'your_key' exist in obj
    console.log('key exist in obj');
}

Hinweis: Wenn Ihr Schlüssel gleich null oder "" ist, ist Ihre "if" -Anweisung falsch.

obj = {'a': '', 'b': null, 'd': 'value'}
!obj['a']    // result ---> true
!obj['b']    // result ---> true
!obj['c']    // result ---> true
!obj['d']    // result ---> false

Der beste Weg, um zu überprüfen, ob ein Schlüssel in einem Objekt vorhanden ist, ist:'a' in obj

Ali Hallaji
quelle
1

Sie können dies versuchen:

const data = {
  name : "Test",
  value: 12
}

if("name" in data){
  //Found
}
else {
  //Not found
}
Achsuthan
quelle
1

map.has(key)ist die neueste Methode von ECMAScript 2015 , um das Vorhandensein eines Schlüssels in einer Karte zu überprüfen. Siehe diese für nähere Details.

Diablo
quelle
0

der einfachste Weg ist

const obj = {
  a: 'value of a',
  b: 'value of b',
  c: 'value of c'
};

if(obj.a){
  console.log(obj.a);
}else{
  console.log('obj.a does not exist');
}

Khan
quelle