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

181
Visualizações
Obtenga la diferencia entre 2 índices de una matriz agrupada (JavaScript)

Extraje datos de un archivo CSV de una transacción criptográfica y agrupé los resultados usando la columna Token. Así es como se ve la matriz agrupada

 **[ ETH:[ [ 1571967200, 'DEPOSIT', 'ETH', 0.68364 ], [ 1571967189, 'WITHDRAWAL', 'ETH', 0.493839 ], [ 1571967110, 'DEPOSIT', 'ETH', 0.347595 ], [ 1571966982, 'WITHDRAWAL', 'ETH', 0.266166 ], [ 1571966641, 'DEPOSIT', 'ETH', 0.899781 ], [ 1571966421, 'DEPOSIT', 'ETH', 0.218207 ], [ 1571966410, 'DEPOSIT', 'ETH', 0.205472 ], [ 1571966250, 'WITHDRAWAL', 'ETH', 0.761543 ], [ 1571966124, 'DEPOSIT', 'ETH', 0.66315 ], [ 1571965892, 'DEPOSIT', 'ETH', 0.554933 ] ], BTC: [ [ 1571966685, 'DEPOSIT', 'BTC', 0.658794 ], [ 1571966568, 'DEPOSIT', 'BTC', 0.630386 ], [ 1571966566, 'DEPOSIT', 'BTC', 0.985879 ], [ 1571966499, 'DEPOSIT', 'BTC', 0.162165 ], [ 1571966329, 'WITHDRAWAL', 'BTC', 0.063663 ], [ 1571966194, 'DEPOSIT', 'BTC', 0.858688 ], [ 1571966049, 'DEPOSIT', 'BTC', 0.696682 ], [ 1571966026, 'DEPOSIT', 'BTC', 0.747093 ], [ 1571965990, 'WITHDRAWAL', 'BTC', 0.987358 ] ] ]**

Aquí está el código que he usado para agrupar

 inputStream.pipe(new CsvReadableStream({ parseNumbers: true, parseBooleans: true, trim: true })) .on('data', (row)=> { csvData.push(row); }) .on('end', function () { groupedResult = csvData.reduce((acc, curr) => { if(!acc[curr[2]]){ acc[curr[2]] = []; } acc[curr[2]].push(curr); return acc; },[]); });

Estoy tratando de sumar todos los depósitos y restar los retiros de cada grupo. A continuación se muestra el código que estoy usando para agrupar los retiros y también los depósitos, pero desafortunadamente no funciona. ¿Qué podría estar haciendo mal o cómo sumo todos los depósitos y resto los retiros de cada token?

 for(groupName in groupedResult){ groupedResult[groupName].reduce((acc, curr)=>{ acc[curr[1]] = curr[1]; },[]) }

Aquí está el error que estoy recibiendo

 acc[curr[1]] = curr[1]; ^ TypeError: Cannot set property 'WITHDRAWAL' of undefined at E:\Command Line\bin\index.js:46:34 at Array.reduce (<anonymous>)

Este es el resultado deseado que estoy tratando de obtener

 [ ETH:[ [ Balance['Value here'] ], ], BTC: [ [ Balance['value here'] ], ] ]
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

La devolución de llamada "reductor" de Array#reduce(reducer, initValue, ...) tiene que devolver el valor del acumulador ( return acc; ) para usar en la siguiente ronda.
Esto se debe a que es posible que deba manejar valores primitivos que no mantienen referencias consistentes, por ejemplo, en una situación en la que desea sumar una lista de números: [1, 2, 3, 4].reduce((number,acc) => {return number+acc;}, 0)

 const groupedResult = { ETH:[ [ 1571967200, 'DEPOSIT', 'ETH', 0.68364 ], [ 1571967189, 'WITHDRAWAL', 'ETH', 0.493839 ], [ 1571967110, 'DEPOSIT', 'ETH', 0.347595 ], [ 1571966982, 'WITHDRAWAL', 'ETH', 0.266166 ], [ 1571966641, 'DEPOSIT', 'ETH', 0.899781 ], [ 1571966421, 'DEPOSIT', 'ETH', 0.218207 ], [ 1571966410, 'DEPOSIT', 'ETH', 0.205472 ], [ 1571966250, 'WITHDRAWAL', 'ETH', 0.761543 ], [ 1571966124, 'DEPOSIT', 'ETH', 0.66315 ], [ 1571965892, 'DEPOSIT', 'ETH', 0.554933 ] ], BTC: [ [ 1571966685, 'DEPOSIT', 'BTC', 0.658794 ], [ 1571966568, 'DEPOSIT', 'BTC', 0.630386 ], [ 1571966566, 'DEPOSIT', 'BTC', 0.985879 ], [ 1571966499, 'DEPOSIT', 'BTC', 0.162165 ], [ 1571966329, 'WITHDRAWAL', 'BTC', 0.063663 ], [ 1571966194, 'DEPOSIT', 'BTC', 0.858688 ], [ 1571966049, 'DEPOSIT', 'BTC', 0.696682 ], [ 1571966026, 'DEPOSIT', 'BTC', 0.747093 ], [ 1571965990, 'WITHDRAWAL', 'BTC', 0.987358 ] ] }; const groupedBalance = {}; for(groupName in groupedResult) { const accumulated = groupedResult[groupName].reduce((acc, curr)=>{ acc[curr[1]] += curr[3]; return acc; // ← return the accumulator to use for the next round }, {DEPOSIT: 0, WITHDRAWAL: 0}); console.log(groupName, accumulated); groupedBalance[groupName] = { Balance: accumulated['DEPOSIT'] - accumulated['WITHDRAWAL'] }; } console.log('FINAL RESULTS:', groupedBalance);

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