Comprobando si existe una clave en un objeto JS

88

Tengo el siguiente objeto de JavaScript:

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

¿Hay alguna forma de verificar si existe una clave en la matriz, similar a esta?

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

No funciona.

¿Tengo que iterar a través del obj de esta manera?

jQuery.each(obj, function(key,val)){}
usuario2065483
fuente
4
js - objeto literal :) (no objeto jQuery)
funerr
Verdadero;), muestra que no tengo antecedentes en js: comencé con la biblioteca jQuery desde el principio, y creo que necesito aprender los conceptos básicos ...
user2065483
obj.has("key1")funcionará si está utilizando ES6.
Diablo
2
¿Posible duplicado de Comprobar si existe una clave en un objeto JavaScript?
Gerhard Powell
1
@Diablo creo que estás tratando de decir en obj.hasOwnProperty("key1")lugar de solo has?
Aminu Kano

Respuestas:

173

Utilice el inoperador :

testArray = 'key1' in obj;

Nota al margen: Lo que tienes allí, en realidad no es un objeto jQuery, sino solo un objeto JavaScript simple.

Sirko
fuente
4
¿Podemos comprobar no inasí?
SagarPPanchal
5
@SagarPanchal ¿A qué te refieres? Algo como testArray = !( 'key1' in obj);?
Sirko
49

Eso no es un objeto jQuery, es solo un objeto.

Puede usar el método hasOwnProperty para buscar una clave:

if (obj.hasOwnProperty("key1")) {
  ...
}
Guffa
fuente
no deberías usarlo. se dice que es lento. la mejor manera es usar 'clave' en el objeto
hannad rehman
@hannadrehman ¿Puede darme una referencia al documento / artículo donde se menciona? :)
Nabin
1
@Fan_of_Martijn_Pieters sigo el estricto conjunto de reglas de ESlint. allí se menciona como una de las reglas. eslint.org/docs/rules/no-prototype-builtins
hannad rehman
@hannadrehman No use la clave en el objeto, puede ser simplemente incorrecto, esta es la mejor manera.
Votado en contra porque esto no funciona cuando se detectan claves con un valor nulo. Por ejemplo, si el valor de obj ["key1"] == null (entonces key1 existe en obj y su valor es nulo), esto devolverá un resultado falso de que key1 no está en obj.
user1258361
7
var obj = {
    "key1" : "k1",
    "key2" : "k2",
    "key3" : "k3"
};

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

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

Para acceder a una clave secundaria de otra clave

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

if ("keyF" in obj.key4)
    console.log("has keyF in obj");
Fernando_Jr
fuente
1
O si no hay key1 ..if (!("key1" in obj)) { console.log("no key1 in obj"); }
Hastig Zusammenstellen
3

Las respuestas anteriores son buenas. Pero esto también es bueno y útil.

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

Es bueno para estilo corto de código especial en declaraciones 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: Si su clave es igual a nula o "" su declaración "if" será incorrecta.

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

Entonces, la mejor manera de verificar si existe una clave en un obj es:'a' in obj

Ali Hallaji
fuente
1

Puedes probar esto:

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

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

map.has(key)es la forma más reciente de ECMAScript 2015 de verificar la existencia de una clave en un mapa. Consulte esto para obtener detalles completos.

Diablo
fuente
0

la forma más sencilla es

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

Kan
fuente
si aes una cadena vacía, cero o nula, todavía devolverá 'obj.a no existe', aunque la clave aexista.
Twisted Whisper