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

110
Visualizações
Encontrar la suma de valores de objetos dentro de matrices usando recursividad

Estoy tratando de obtener la suma de tareas completadas usando recursividad. Un objeto representa a un miembro del equipo y puede administrar a otros miembros.

 var team = { name: 'Rufus', completedTasks: 4, manages: [ { name: 'Clara', completedTasks: 6, manages: [ { name: 'Dana', completedTasks: 12, manages: [] } ] }, { name: 'Charles', completedTasks: 19, manages: [] } ] };

Esto es lo que he implementado, pero no obtengo 41. 4 + 6 + 12 + 19 = 41. La función devuelve 45.

 var totalTasks = function (team) { var sum = 0; var innerFunction = function(obj) { if (obj.manages.length === 0) { sum += obj.completedTasks; return; } obj.manages.forEach(function(item) { sum += obj.completedTasks; innerFunction(item); }); }; innerFunction(team); return sum; }; totalTasks(team);

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Esto sucede porque en su ciclo forEach agrega obj.completedTasks que no tiene nada que ver con el elemento en bucle, por lo que está agregando el mismo número en cada iteración.

Mantenga la adición limitada para agregar obj.completedTasks solo una vez (como lo primero que debe hacer), incondicionalmente. Asi que:

 var team = {name: 'Rufus',completedTasks: 4,manages: [{name: 'Clara',completedTasks: 6,manages: [{name: 'Dana',completedTasks: 12,manages: []}]},{name: 'Charles',completedTasks: 19,manages: []}]}; var totalTasks = function (team) { var sum = 0; var innerFunction = function(obj) { sum += obj.completedTasks; if (obj.manages.length === 0) return; obj.manages.forEach(innerFunction); }; innerFunction(team); return sum; }; console.log(totalTasks(team));

Es mejor si no administra la sum como una variable no local, sino que la acumula recursivamente:

 var team = {name: 'Rufus',completedTasks: 4,manages: [{name: 'Clara',completedTasks: 6,manages: [{name: 'Dana',completedTasks: 12,manages: []}]},{name: 'Charles',completedTasks: 19,manages: []}]}; var totalTasks = team => team.completedTasks + team.manages.reduce((sum, child) => sum + totalTasks(child), 0); console.log(totalTasks(team));

about 4 years ago · Juan Pablo Isaza Relatório

0

El problema con tu código es que escribiste:

 sum += obj.completedTasks;

en vez de

 sum += item.completedTasks;

dentro del foreach, lo que significa que las tareas completadas de la persona externa se agregan en lugar de las de la persona interna.

Independientemente, parecía que su función era demasiado complicada y podía acortarse.

 function allTasks (person) { return person.completedTasks + person.manages.map(allTasks).reduce((a, b) => a + b, 0); } 

 var team = { name: 'Rufus', completedTasks: 4, manages: [ { name: 'Clara', completedTasks: 6, manages: [ { name: 'Dana', completedTasks: 12, manages: [] } ] }, { name: 'Charles', completedTasks: 19, manages: [] } ] }; function allTasks (person) { return person.completedTasks + person.manages.map(allTasks).reduce((a, b) => a + b, 0); } console.log(allTasks(team));

about 4 years ago · Juan Pablo Isaza Relatório

0

El siguiente código resolverá el problema.

 function totalTasks(item){ if (item.manages.length){ return item.completedTasks + item.manages.reduce((sum,item) => sum + totalTask(item), 0 ) } return item.completedTasks } totalTasks(team);
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