const result = { "MEN": [], "WOMEN": [], "KIDS TEMP": [ "BCDEFHJJJJJJ34EEE234", "ABCDEFGHIJKL12345678" ] } const result = { "MEN": [], "WOMEN": [], "CHILDREN TEMP": [ "BCDEFHJJJJJJ34EEE234", "ABCDEFGHIJKL12345678" ] } Tengo un result de objeto como el anterior. A veces, puede tener la propiedad KIDS TEMP y, a veces, CHILDREN TEMP . Dado que esta propiedad tiene espacios, no puedo usar el operador de punto para obtener estas propiedades. Quiero crear una bandera si existe CHILDREN TEMP o KIDS TEMP PARA NIÑOS. Intenté a continuación: -
const part = 'KIDS TEMP' || 'CHILDREN TEMP'; let check; if (result) { check = !!(result?.MEN.length !== 0 || result[part].length !== 0); } Pero el código anterior se rompe cuando recibo CHILDREN TEMP diciendo que no puede leer la longitud de indefinido. ¿Cómo puedo solucionar esto?
Object.keys() devuelve los nombres de propiedad de un objeto. Puede comprobar así, si un objeto posee una determinada propiedad:
const result = { "MEN": [], "WOMEN": [], "KIDS TEMP": [ "BCDEFHJJJJJJ34EEE234", "ABCDEFGHIJKL12345678" ] } console.log(Object.keys(result).includes("KIDS TEMP")); console.log(Object.keys(result).includes("CHILDREN TEMP"));Si desea probar, si existe un determinado atributo, y en caso de que exista, contiene una matriz no vacía, puede probarlo así:
const result = { "MEN": [], "WOMEN": [], "KIDS TEMP": [ "BCDEFHJJJJJJ34EEE234", "ABCDEFGHIJKL12345678" ] } console.log(result["KIDS TEMP"]?.length > 0); console.log(result["CHILDREN TEMP"]?.length > 0); El principal problema con su código es que const part = string1 || string2 siempre se evalúa como string1 , que no es lo que pretende hacer.
Puede usar el método de Object hasOwnProperty; devolverá true/false dependiendo de si la propiedad existe en el objeto o no.
const result = { "MEN": [], "WOMEN": [], "KIDS TEMP": [ "BCDEFHJJJJJJ34EEE234", "ABCDEFGHIJKL12345678" ] } console.log(result.hasOwnProperty('KIDS TEMP'),result.hasOwnProperty('CHILDREN TEMP'));