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)){}

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


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.


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")) {
  ...
}

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");

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


1

Puedes probar esto:

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

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

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.


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


si aes una cadena vacía, cero o nula, todavía devolverá 'obj.a no existe', aunque la clave aexista.
Twisted Whisper
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.