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

158
Views
Filtrado de matriz de objetos anidados en JavaScript hasta 'n' niveles

Quiero filtrar la matriz de objetos anidados en javascript.

Obtuve la siguiente respuesta de otra pregunta .

 var sampleData= [{ "rowId": "3.0.0", "startDate": "2020-10-20", "subTasks": [ { "rowId": "3.3.0", "startDate": "2021-05-26", "subTasks": [ { "rowId": "3.3.0.1", "startDate": "2021-05-26", "subTasks": [] }, { "rowId": "3.3.0.2", "startDate": "2021-06-09", "endDate": "2021-07-23", "subTasks": [] }, ] }, ] }] filtered = sampleData.map(element => { return { ...element, subTasks: element.subTasks.filter(subElement => { return subElement.endDate }) } }) console.log("sampleData",JSON.stringify(filtered))

Quiero archivar según la fecha de finalización. Salida esperada: es necesario filtrar el objeto con ID de fila "3.3.0.2".

Este código está filtrando solo hasta 2 niveles. Pero en mi caso los objetos anidados pueden crecer hasta 10 niveles. ¿Cómo puedo filtrar la matriz de objetos hasta n niveles?

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

0

Puede hacerlo con una función recursiva y recorrer solo las subtareas válidas. No creo que necesite mucha explicación, suponiendo que sepa qué es una función recursiva (y supongo que sí):

 function recurseOnSubTasks(elem) { const filteredSubTasks = elem.subTasks .filter(subTask => !subTask.endDate) .map(subTask => recurseOnSubTasks(subTask)) return { ...elem, subTasks: filteredSubTasks } }

Y luego llamarlo con:

 sampleData.map(elem => recurseOnSubTasks(elem)) 

 var sampleData= [{ "rowId": "3.0.0", "startDate": "2020-10-20", "subTasks": [ { "rowId": "3.3.0", "startDate": "2021-05-26", "subTasks": [ { "rowId": "3.3.0.1", "startDate": "2021-05-26", "subTasks": [] }, { "rowId": "3.3.0.2", "startDate": "2021-06-09", "endDate": "2021-07-23", "subTasks": [] }, ] }, ] }]; function recurseOnSubTasks(elem) { const filteredSubTasks = elem.subTasks .filter(subTask => !subTask.endDate) .map(subTask => recurseOnSubTasks(subTask)) return { ...elem, subTasks: filteredSubTasks } } console.log(sampleData.map(elem => recurseOnSubTasks(elem)));

about 4 years ago · Juan Pablo Isaza Report

0

Si desea filtrar según la fecha de finalización, puede usar el método forEach y colocarlo en un objeto y luego llegar al resultado deseado. Espero que esto funcione.

 var sampleData= [{ "rowId": "3.0.0", "startDate": "2020-10-20", "subTasks": [ { "rowId": "3.3.0", "startDate": "2021-05-26", "subTasks": [ { "rowId": "3.3.0.1", "startDate": "2021-05-26", "subTasks": [] }, { "rowId": "3.3.0.2", "startDate": "2021-06-09", "endDate": "2021-07-23", "subTasks": [] }, ] }, ] }] sampleData.forEach((obj)=> { obj.subTasks.forEach((prop) => { const newObj = {name: prop}; console.log(newObj.name.subTasks[1]); console.log(newObj.name.subTasks[1].endDate); }) })
about 4 years ago · Juan Pablo Isaza Report

0

puedes hacerlo usando la recursividad. La matriz de valores contendrá todas las tareas, luego puede filtrar en cualquier propiedad que desee.

 var values = []; function GetValues(samples){ if(samples != [] && samples != undefined && samples != null){ for(var sample of samples){ values.push(sample) GetValues(sample.subTasks) } }else{ return {}; } } GetValues(sampleData)
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!