Así que tengo una matriz con muchos objetos, todos esos objetos tienen quizás matrices y objetos, por lo que este árbol similar continúa, y quiero hacer una búsqueda que busque todos los valores en todas esas matrices y objetos y regrese.
Esta es la función que tengo pero no funciona. Creo que solo funciona con el primer objeto, pero aún no funciona.
Aquí está la función que tengo (está rota):
const findIn = (arr, query) => { let queryFormatted = query.toLowerCase().replace(/\s/g, ' '); return arr.filter((obj) => Object.keys(obj).some((key) => { if (typeof obj[key] === 'string') { return obj[key] .toLowerCase() .replace(/\s/g, ' ') .includes(queryFormatted); } return false; }) ); };Muestra de datos (que necesita ser buscado):
Si entiendo su pregunta correctamente y desea verificar si alguna cadena anidada es una subcadena de su consulta, devolviendo verdadero o falso, aquí hay una solución:
const findIn = (elem, query) => { query = query.toLowerCase().replace(/\s/g,''); if (!(elem instanceof Object)){ if (typeof elem == "string"){ return elem.toLowerCase().replace(/\s/g,'').includes(query); } return false } if (Array.isArray(elem)){ for (const nested of elem){ if (findIn(nested,query)){ return true; } } return false; } for (const nested of Object.values(elem)){ if (findIn(nested,query)){ return true; } } return false;}
Tenga en cuenta que esto podría no funcionar en algunos casos específicos, pero debería ser suficiente si está analizando json en un objeto js y luego llamando a la función.