Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

124
Vistas
buscar una matriz de objetos en función del valor presente dentro de un valor de un objeto en forma de matriz

Tengo un objeto con dos campos filter1 y filter2 que tienen valores en forma de matriz

let filter = {filter1:["mine","your"]: filter2:["C","D"]} //valores no fijos

los datos están en forma de matriz de objetos

 let data = [ { id:1, filter1:["mine"], filter2:["E","C"]}, { id:2, filter1:["mine"], filter2:["E","C","F"]}, { id:3, filter1:["your"], filter2:["C"]}, { id:3, filter1:["your"], filter2:["D","C"]}, { id:5, filter1:["other"], filter2:["F"]}, ... ]

Tengo que filtrar aquellos objetos que tienen alguno de los campos presentes en una clave específica, por ejemplo, si el filter es {filter1:["mine"]: filter2:["F","D"]} , primero buscará cualquier elemento de filter1 en filter1 del objeto de datos y luego busque cualquier elemento de filter2 que esté presente en el filter2 del objeto de datos y devuelva el objeto si se encuentra alguno

few example

resultado para {filter1:["mine"]: filter2:["F","D"]}

 result = [ { id:1, filter1:["mine"], filter2:["E","C"]}, //since filter1 "mine" { id:2, filter1:["mine"], filter2:["E","C","F"]}, //since filter1 "mine" { id:3, filter1:["your"], filter2:["D","C"]}, //since from "F" and "D" from filter2 "D" is present { id:5, filter1:["other"], filter2:["F"]}, //since "F" from filter2 is present ]

resultado para {filter1:["your"]: filter2:["F","G"]}

 result = [ { id:2, filter1:["mine"], filter2:["E","C","F"]}, //since "F" from filter2 is present { id:3, filter1:["your"], filter2:["D","C"]}, //since filter1 is "your" { id:5, filter1:["other"], filter2:["F"]}, //since "F" from filter2 is present ]

resultado para {filter1:[]: filter2:["D"]}

 result = [ { id:3, filter1:["your"], filter2:["D","C"]}, //since filter2 has "D" ]
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede usar una combinación de .filter() , .some() e .includes() :

 const data = [ { id:1, filter1:["mine"], filter2:["E","C"]}, { id:2, filter1:["mine"], filter2:["E","C","F"]}, { id:3, filter1:["your"], filter2:["C"]}, { id:3, filter1:["your"], filter2:["D","C"]}, { id:5, filter1:["other"], filter2:["F"]} ]; const search = ({ filter1, filter2 }) => data.filter(item => item.filter1.some(fItem => filter1.includes(fItem)) || item.filter2.some(fItem => filter2.includes(fItem)) ); const result = search({ filter1:["mine"], filter2:["F","D"] }); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede generalizar la solución propuesta por RoMilton llamando a some() en Object.entries() del objeto de filtro pasado y luego iterando cada key y filter_array con llamadas anidadas a some() .

Si también Array#concat() la propiedad del elemento de datos iterado actualmente en una matriz, puede incluir propiedades que no sean de matriz en el objeto de filtro, es decir, id en este caso.

 const data = [ { id: 1, filter1: ["mine"], filter2: ["E", "C"] }, { id: 2, filter1: ["mine"], filter2: ["E", "C", "F"] }, { id: 3, filter1: ["your"], filter2: ["C"] }, { id: 3, filter1: ["your"], filter2: ["D", "C"] }, { id: 5, filter1: ["other"], filter2: ["F"] } ]; const search = (array, filter_object) => array.filter(item => Object.entries(filter_object).some(([key, filter_array]) => [].concat(item[key]).some(fitem => filter_array.includes(fitem))) ); const filter = { filter1: ["mine"], filter2: ["F", "D"] }; const result = search(data, filter); console.log(...result.map(({ id }) => ({ id }))); const filter2 = { id: [5], filter1: ["mine"] } const result2 = search(data, filter2); console.log(...result2.map(({ id }) => ({ id })));
 .as-console-wrapper { max-height: 100% !important; top: 0; }

Este uso de concat() también se puede aplicar a la solución codificada para permitir propiedades que pueden no ser matrices en su matriz de datos.

 const data = [ { id: 1, filter1: "mine", filter2: ["E", "C"] }, { id: 2, filter1: ["mine"], filter2: ["E", "C", "F"] }, { id: 3, filter1: ["your"], filter2: ["C"] }, { id: 3, filter1: ["your"], filter2: ["D", "C"] }, { id: 5, filter1: ["other"], filter2: ["F"] } ]; const search = ({ filter1, filter2 }) => ( data.filter(item => [].concat(item.filter1).some(fItem => filter1.includes(fItem)) || [].concat(item.filter2).some(fItem => filter2.includes(fItem)) )); const result = search({ filter1: ["mine"], filter2: ["F", "D"] }); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda