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

123
Visualizações
Obtenga la suma total del monto del precio multiplicado por la cantidad sobre matrices anidadas

He anidado una matriz de objetos como este:

 [ { tasks: [ { requestTaskId: 'be6ee458-8ef0-11ec-912a-3d12c29b6342', price: 5, }, { requestTaskId: 'be6ee502-8ef0-11ec-b81a-3d12c29b6342', price: 5, }, ], request: { tasks: [ { id: 'be6ee458-8ef0-11ec-912a-3d12c29b6342', quantity: 10, }, { id: 'be6ee502-8ef0-11ec-b81a-3d12c29b6342', quantity: 10, }, ], }, }, ];

Y necesito sumar todo el precio y la cantidad de las tareas, también verificando/cotejando por tasks.requestTaskId === request.tasks.id .

El resultado debe ser (10 * 5) + (10 * 5) = 100.

¿Cómo obtener esto usando map / find / reduce ? No puedo pensar en mejores ayudantes para lograr esto, simplemente no sé cómo combinar todo.

Esto es lo que probé:

 array.map((item) => ({ ...item, ...item.request.tasks.find((requestTask) => ({ ...requestTask, ...item.tasks.find(({ requestTaskId }) => requestTaskId === requestTask.id), })), })) .map(({ amount, quantity})) => ({ total: amount * quantity, });
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Aquí hay un ejemplo con sus datos dados, asumiendo que ocurren múltiples objetos en el objeto de nivel superior:

 const data = [{ tasks: [{ requestTaskId: 'be6ee458-8ef0-11ec-912a-3d12c29b6342', price: 5, }, { requestTaskId: 'be6ee502-8ef0-11ec-b81a-3d12c29b6342', price: 5, }, ], request: { tasks: [{ id: 'be6ee458-8ef0-11ec-912a-3d12c29b6342', quantity: 10, }, { id: 'be6ee502-8ef0-11ec-b81a-3d12c29b6342', quantity: 10, }, ], }, },]; // function for calculating the total of one object holding tasks and request props. function calculateTotalPrice(entity) { // iterate through all tasks and "reduce" them to one number :) return entity.tasks.reduce((total, task) => { // Search for a request with the same id!. const request = entity.request.tasks.find(request => request.id === task.requestTaskId) if (request) { return total + (request.quantity * task.price) } // If no price is found, return current total and log something!. console.log('No price found for task:', task) return total }, 0) } // With your object you can now reduce this aswell for getting the grand // total over all objects.. const totalPrice = data.reduce((grandTotal, entity) => { return grandTotal + calculateTotalPrice(entity) }, 0) console.log('totalPrice:', totalPrice)
about 4 years ago · Juan Pablo Isaza Relatório

0

Puede usar Array.reduce() para sumar el precio total de todas las tareas, llamando primero a la matriz de entrada y luego a las tareas.

Si no se encuentra requestTask para una tarea, simplemente dejaremos el total como está. Puede cambiar este comportamiento para generar un error si cree que esto refleja mejor su caso de uso.

Envolveríamos esto en una función getTotalSum() .

 let input1 = [ { tasks: [ { requestTaskId: 'be6ee458-8ef0-11ec-912a-3d12c29b6342', price: 5, }, { requestTaskId: 'be6ee502-8ef0-11ec-b81a-3d12c29b6342', price: 5, }, ], request: { tasks: [ { id: 'be6ee458-8ef0-11ec-912a-3d12c29b6342', quantity: 10, }, { id: 'be6ee502-8ef0-11ec-b81a-3d12c29b6342', quantity: 10, }, ], }, }, ]; let input2 = [ { tasks: [ { requestTaskId: '4a0cc1d8-9720-48c4-9678-3372c20ff7c3', price: 10, }, { requestTaskId: '6c178a61-e9aa-45bf-bcde-1a52bcd29205', price: 1, }, ], request: { tasks: [ { id: '4a0cc1d8-9720-48c4-9678-3372c20ff7c3', quantity: 2, }, { id: '6c178a61-e9aa-45bf-bcde-1a52bcd29205', quantity: 3, }, ], }, }, ]; function getTotalSum(input) { return input.reduce((total, { tasks, request }) => { return tasks.reduce((total, task) => { const requestTask = request.tasks.find(({ id }) => id === task.requestTaskId); total += requestTask ? task.price * requestTask.quantity: 0; return total; }, total) }, 0) } console.log('Sum1:', getTotalSum(input1)) console.log('Sum2:', getTotalSum(input2))

about 4 years ago · Juan Pablo Isaza Relatório

0

Si su objeto está ordenado como se muestra con cada tarea que marcha la solicitud correspondiente por índice, entonces usar los métodos .map() y .reduce() lograría su objetivo:

 const total = orders.map(order => order.tasks.reduce( (tot, prod, index) => tot + prod.price * order.request.tasks[index].quantity, 0 )); console.log( total );

MANIFESTACIÓN

 const orders = [{ tasks: [{ requestTaskId: 'be6ee458-8ef0-11ec-912a-3d12c29b6342', price: 5, }, { requestTaskId: 'be6ee502-8ef0-11ec-b81a-3d12c29b6342', price: 5, }, ], request: { tasks: [{ id: 'be6ee458-8ef0-11ec-912a-3d12c29b6342', quantity: 10, }, { id: 'be6ee502-8ef0-11ec-b81a-3d12c29b6342', quantity: 10, }, ], }, },{ tasks: [{ requestTaskId: 'dabee458-8ef0-11ec-912a-3d12c29b6342', price: 15, }, { requestTaskId: 'dabee502-8ef0-11ec-b81a-3d12c29b6342', price: 15, }, ], request: { tasks: [{ id: 'dabee458-8ef0-11ec-912a-3d12c29b6342', quantity: 15, }, { id: 'dabee502-8ef0-11ec-b81a-3d12c29b6342', quantity: 50, }, ], }, }]; const total = orders.map(order => order.tasks.reduce( (tot, prod, index) => tot + prod.price * order.request.tasks[index].quantity, 0 )); console.log( total );

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