Dime, ¿cómo verificar correctamente la existencia de una clave en matrices asociativas?
Por ejemplo:
var mydata = { key1: '', key2: { subkey1: { subkey1_1: { value1: '' value2" '', }, }, subkey2: ''; }, } if ((mydata.key2 != undefined) && (mydata.key2.subkey1 != undefined) && (mydata.key2.subkey1.subkey1_1 != undefined)) mydata.key2.subkey1.subkey1_1.value1 = 'test';Demasiado largo y confuso
((mydata.key2 != undefined) && (mydata.key2.subkey1 != undefined) && (mydata.key2.subkey1.subkey1_1 != undefined))Me gustaría usar una función más simple, como
safeSet(mydata.key2.subkey1.subkey1_1.value1, 'test');o
if (is_undefined(mydata.key2.subkey1.subkey1_1.value1) == true) mydata.key2.subkey1.subkey1_1.value1 = 'test'; // now - error if 'mydata.key2.subkey1.subkey1_1' not existPuede crear una función personalizada usando reduce() para probar si existe una propiedad anidada. Simplemente puede pasar la clave como una cadena.
var mydata = { key1: '', key2: { subkey1: { subkey1_1: { value1: '', value2: '', }, }, subkey2: '' }, } function safeSet(key, data) { return key.split('.').reduce(function(r, e) { return r ? r[e] : undefined; }, data) != undefined } console.log(safeSet('key2.subkey1.subkey1_1.value1', mydata))Debes usar el operador in:
"key" in obj // true, regardless of the actual value O, si desea probar particularmente las propiedades de la instancia del objeto (y no las propiedades heredadas), use hasOwnProperty:
obj.hasOwnProperty("key") // trueEspero que esto te ayude.
Fuente: http://www.advancesharp.com/questions/628/checking-if-an-associative-array-key-exists-in-javascript