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

180
Views
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 answers
Answer question

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 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!