Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

164
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda