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

157
Views
Filtrar matriz comparando valores de propiedad

Ok, tengo una matriz de la siguiente manera

 const services = [ { "data":[ { "duration":{ "start":"10", "end":"11" }, "serviceId":215 }, { "duration":{ "start":"4", "end":"5" }, "serviceId":37 }, ], "title":"1632767400000" }, { "data":[ { "duration":{ "start":"9", "end":"11" }, "serviceId":215 }, { "duration":{ "start":"2", "end":"3" }, "serviceId":37 }, ], "title":"1632767400000" }, ]

Como puede ver, tengo otra matriz ( data ) dentro de mi matriz principal que tiene varios objetos.

quiero filtrar estos datos, por ejemplo, quiero obtener datos que tengan una duración inicial y final entre 9 y 11.

Entonces mi resultado final de los datos filtrados debe ser el siguiente

 const services = [ { "data":[ { "duration":{ "start":"10", "end":"11" }, "serviceId":215 }, ], "title":"1632767400000" }, { "data":[ { "duration":{ "start":"9", "end":"11" }, "serviceId":215 }, ], "title":"1632767400000" }, ]

He intentado algo como lo siguiente

 const test = services.map((item) => { return item.data.filter((service) => { return ( parseInt(service.duration.start) >= 9 && parseInt(service.duration.end) <= 11 ); }); });

Pero solo devuelve la matriz de elementos data y no la matriz completa como necesito. ¿Cómo filtro matrices de data en mi matriz principal y mantengo la estructura original de la matriz principal?

FYI: cualquier solución lodash también es bienvenida.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

services es una matriz de objetos, por lo que primero debe mapear la matriz y devolver un objeto con todas las propiedades como ...o y data con objetos filtrados cuya duration.start <= 11

 services.map((o) => ({ ...o, data: o.data.filter( (obj) => +obj.duration.start >= 9 && +obj.duration.end <= 11 ), })); 

 const services = [ { data: [ { duration: { start: "10", end: "11", }, serviceId: 215, }, { duration: { start: "4", end: "5", }, serviceId: 37, }, ], title: "1632767400000", }, { data: [ { duration: { start: "9", end: "11", }, serviceId: 215, }, { duration: { start: "2", end: "3", }, serviceId: 37, }, ], title: "1632767400000", }, ]; const result = services.map((o) => { return { ...o, data: o.data.filter((obj) => +obj.duration.start >= 9 && +obj.duration.end <= 11), }; }); console.log(result);

about 4 years ago · Juan Pablo Isaza Report

0

Sus datos de respuesta se ocupan solo del nodo de data en la matriz de servicios.

Depurando su función de mapa

 services.map((item) => { return item.data.filter((service) => { return ( parseInt(service.duration.start) >= 9 && parseInt(service.duration.end) <= 11 ); }); });

Su función de mapa recorre la matriz de services . Al hacer un bucle en la matriz, filtra el nodo de datos y verifica la condición y devuelve los nodos de datos que satisfacen esa condición. Tenga en cuenta que vuelve a mostrar solo los nodos de datos

Debe enviar no solo los nodos de datos, debe usar todos los nodos en cada matriz de objetos de services . Esto se puede hacer usando un operador de propagación como {data, ...restNodes} . Aquí, cada objeto de la matriz de services se dividirá en dos conjuntos. El nodo de data de cada objeto estará disponible en la variable llamada data y el resto de las variables estarán disponibles en la variable restNodes .

Entonces, en el mapa, devuelva la acción de filtro en el nodo de data , así como la variable restNodes . Entonces esto dará todos los datos en cada nodo de la matriz de services y los datos filtrados del nodo de data .

 const services = [ { "data": [ { "duration": { "start": "10", "end": "11" }, "serviceId": 215 }, { "duration": { "start": "4", "end": "5" }, "serviceId": 37 }, ], "title": "1632767400000" }, { "data": [ { "duration": { "start": "9", "end": "11" }, "serviceId": 215 }, { "duration": { "start": "2", "end": "3" }, "serviceId": 37 }, ], "title": "1632767400000" }, ]; const output = services.map(({data, ...restNodes}) => { return { data: data.filter((service) => { return ( parseInt(service.duration.start) >= 9 && parseInt(service.duration.end) <= 11 ); }), ...restNodes, }; }); console.log(output);

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!