Vérifier si une clé existe dans un objet JS

88

J'ai l'objet JavaScript suivant:

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

Existe-t-il un moyen de vérifier si une clé existe dans le tableau, similaire à celui-ci?

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

ne marche pas.

Dois-je parcourir l'objet comme ceci?

jQuery.each(obj, function(key,val)){}
user2065483
la source
4
js - object literal :) (not jQuery object)
funerr
True;), montre que je n'ai pas d'arrière-plan js - a commencé avec la bibliothèque jQuery dès le début, et je crois que j'ai besoin d'apprendre les bases ...
user2065483
obj.has("key1")fonctionnera si vous utilisez ES6.
Diablo
1
@Diablo Je pense que vous essayez de dire obj.hasOwnProperty("key1")au lieu de juste has?
Aminu Kano

Réponses:

173

Utilisez l' inopérateur :

testArray = 'key1' in obj;

Note de bas de page: Ce que vous avez là, ce n'est en fait pas un objet jQuery, mais juste un simple objet JavaScript.

Sirko
la source
4
Peut-on vérifier pas incomme ça?
SagarPPanchal
5
@SagarPanchal Que voulez-vous dire? Quelque chose comme testArray = !( 'key1' in obj);?
Sirko
49

Ce n'est pas un objet jQuery, c'est juste un objet.

Vous pouvez utiliser la méthode hasOwnProperty pour rechercher une clé:

if (obj.hasOwnProperty("key1")) {
  ...
}
Guffa
la source
vous ne devriez pas l'utiliser. on dit qu'elle est lente. la meilleure façon est d'utiliser 'key' dans l'objet
hannad rehman
@hannadrehman Pouvez-vous me donner une référence au doc ​​/ article où il est mentionné? :)
Nabin
1
@Fan_of_Martijn_Pieters Je suis un ensemble de règles ESlint strictes. il y est mentionné comme l'une des règles. eslint.org/docs/rules/no-prototype-builtins
hannad rehman
@hannadrehman N'utilisez pas l'objet clé dans l'objet, cela peut être tout simplement faux, c'est la meilleure façon.
Évalué car cela ne fonctionne pas lors de la détection de clés avec une valeur nulle. Par exemple, si la valeur de obj ["key1"] == null (donc key1 existe dans obj et sa valeur est null), cela renverra un faux résultat indiquant que key1 n'est pas dans obj.
user1258361
7
var obj = {
    "key1" : "k1",
    "key2" : "k2",
    "key3" : "k3"
};

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

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

Pour accéder à une clé enfant d'une autre clé

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

if ("keyF" in obj.key4)
    console.log("has keyF in obj");
Fernando_Jr
la source
1
Ou si aucune clé1 ..if (!("key1" in obj)) { console.log("no key1 in obj"); }
Hastig Zusammenstellen
3

Les réponses ci-dessus sont bonnes. Mais c'est bien aussi et utile.

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

C'est bon pour le style court de code spécial dans les instructions if:

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

Remarque: Si votre clé est égale à null ou "" votre "if" instruction sera erronée.

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

Donc, la meilleure façon de vérifier si une clé existe dans un obj est:'a' in obj

Ali Hallaji
la source
1

Vous pouvez essayer ceci:

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

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

map.has(key)est le dernier moyen ECMAScript 2015 de vérifier l'existence d'une clé dans une carte. Référez-vous à ceci pour plus de détails.

Diablo
la source
0

le moyen le plus simple est

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
la source
si aest une chaîne vide, zéro ou nulle, elle retournera toujours «obj.a n'existe pas», même si la clé aexiste.
Twisted Whisper