BuscaRecursivo.js

Busca un valor proporcionado dentro de un arreglo de objetos.

by eorozco

JavaScript

let actores = [
{"nombre":"nombre 1", 
"contactos":[
	{"tipo":"EMAIL","contacto":"[email protected]"},
  {"tipo":"TELEFONO","contacto":"1234567890"},
  {"tipo":"CELULAR","contacto":"1111111111"},
]},
{"nombre":"nombre 2", 
"contactos":[
	{"tipo":"EMAIL","contacto":"[email protected]"},
  {"tipo":"TELEFONO","contacto":"1134567890"},
  {"tipo":"CELULAR","contacto":"1211111111"},
]},
];


// Esto es lo que vamos a buscar
let muestra = "1111111111";
muestra = muestra.toLowerCase(); //Pasamos a minúsculas para homologar el case al buscar.

/**
 * La idea es filtrar sobre las llaves de los objetos del arreglo, en este caso actores, e iterar recursivamente 
 * por todos los valores hasta encontrar el valor buscado. La función regresa finalmente el contacto coincidente... 
 * Sólo funciona para indicarnos si existe o no un valor repetido entre los contactos
 * @return Regresa boolean, true si ya existe, false si no existe el valor muestra en el arreglo de objetos
 */
let yaExiste = !! actores.filter(function buscar(actor) {
   
   
   return Object.keys(actor).some((key) => {
   		
      
       if(typeof actor[key] === "string") {                                
           
           return actor[key].toLowerCase() === muestra;     
           
       } else if(actor[key] && typeof actor[key] === "object") {
           
           return buscar(actor[key]);
           
       }
       
       return false;
       
   });
}).length;


console.log(yaExiste);