Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

128
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!