Escribí un código (con la ayuda de otra pregunta) para obtener objetos de un árbol json.
let objFound = null; function getObjFromValue(obj, prop, val) { Object.keys(obj).forEach((key) => { if (objFound == null) { if (key === prop && val === obj[key]) { objFound = obj; } if (typeof obj[key] === 'object') { getObjFromValue(obj[key], prop, val); } } }); return objFound; } El problema con esto es que puedo usarlo solo una vez ya que la variable objFound es global (la necesito para detener el ciclo forEach de alguna manera) y nunca se vuelve a anular, así que cuando hago otra búsqueda recibo el primer y anterior objeto que la función encontrada. ¿Hay alguna forma de mejorar/arreglar mi función?
Puede usar una variable local para devolver el valor, después de establecer la variable global en nulo.
let toReturn = objFound; objFound = null; return toReturn;Sin embargo, este enfoque de variable global podría no ser el mejor. El comentario de @pilchard tiene una buena alternativa, haciendo que la variable sea local.