Verifica se una chiave esiste in un oggetto JS


88

Ho il seguente oggetto JavaScript:

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

C'è un modo per verificare se esiste una chiave nell'array, simile a questa?

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

non funziona.

Devo iterare attraverso l'oggetto in questo modo?

jQuery.each(obj, function(key,val)){}

4
js - object literal :) (non jQuery object)
funerr

Vero;), mostra che non ho uno sfondo js - ho iniziato con la libreria jQuery fin dall'inizio, e credo di aver bisogno di imparare le basi ...
user2065483

obj.has("key1")funzionerà se stai usando ES6.
Diablo


1
@Diablo penso che stai cercando di dire obj.hasOwnProperty("key1")invece di solo has?
Aminu Kano

Risposte:


176

Usa l' inoperatore :

testArray = 'key1' in obj;

Nota a margine: ciò che hai lì, in realtà non è un oggetto jQuery, ma solo un semplice oggetto JavaScript.


4
Possiamo controllare non in inquesto modo?
SagarPPanchal

5
@SagarPanchal Cosa intendi? Qualcosa di simile testArray = !( 'key1' in obj);?
Sirko

50

Non è un oggetto jQuery, è solo un oggetto.

Puoi utilizzare il metodo hasOwnProperty per verificare la presenza di una chiave:

if (obj.hasOwnProperty("key1")) {
  ...
}

non dovresti usarlo. si dice che sia lento. il modo migliore è usare la "chiave" nell'oggetto
hannad rehman

@hannadrehman Puoi darmi un riferimento al documento / articolo in cui è menzionato? :)
Nabin

1
@Fan_of_Martijn_Pieters seguo rigorose regole ESlint. è menzionato lì come una delle regole. eslint.org/docs/rules/no-prototype-builtins
hannad rehman

@hannadrehman Non usare l'oggetto key-in, può essere semplicemente sbagliato, questo è il modo migliore.

Downvoted perché questo non funziona quando si rilevano chiavi con un valore nullo. Ad esempio, se il valore di obj ["key1"] == null (quindi key1 esiste in obj e il suo valore è null), questo restituirà un risultato falso che key1 non è in obj.
user1258361

7
var obj = {
    "key1" : "k1",
    "key2" : "k2",
    "key3" : "k3"
};

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

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

Per accedere a una chiave figlio di un'altra chiave

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

if ("keyF" in obj.key4)
    console.log("has keyF in obj");

1
O se nessuna chiave1 ..if (!("key1" in obj)) { console.log("no key1 in obj"); }
Hastig Zusammenstellen

3

Le risposte sopra sono buone. Ma anche questo è buono e utile.

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

Va bene per uno stile breve di codice speciale nelle istruzioni 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');
}

Nota: se la tua chiave è uguale a null o l'istruzione "" your "if" sarà errata.

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

Quindi, il modo migliore per verificare se una chiave esiste in un oggetto è:'a' in obj


1

Puoi provare questo:

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

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


0

il modo più semplice è

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


se aè una stringa vuota, zero o null, restituirà comunque 'obj.a non esiste', anche se la chiave aesiste.
Twisted Whisper il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.