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

206
Views
Reescritura para reducir la devolución de llamada para dejar de reasignar el acumulador

Tengo una función escrita así:

 type ChartData = { x?: number[], y?: number[], z?: number[], }; const data = [{ x: 1, y: 2, z: 3 }, { x: 4, y: 7, z: 10 }]; const formattedData = data.reduce((acc, el) => { Object.entries(el!).forEach(([k, v]) => { acc = { ...acc, [k]: [...(acc[k as keyof ChartData] || []), v] }; }); return acc; }, {} as ChartData);

Este código hace lo que quiero, pero recibo un error eslint: no-param-reassign .

Sé que podría deshabilitar la regla, pero me preguntaba si hay una mejor manera de escribir esta devolución de llamada reducida para no reasignar acc .

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Esta advertencia de 'sin reasignación de parámetros' significa que ha modificado los parámetros de la función dentro de la función. Así que aquí quizás haya una solución para esta advertencia.

 type ChartData = { x?: number[], y?: number[], z?: number[], }; const data = [{ x: 1, y: 2, z: 3 }, { x: 4, y: 7, z: 10 }]; const formattedData = data.reduce((acc, el) => { let newAcc = { ...acc }; Object.entries(el!).forEach(([k, v]) => { newAcc = { ...newAcc , [k]: [...(newAcc [k as keyof ChartData] || []), v] }; }); return newAcc ; }, {} as ChartData);
about 4 years ago · Santiago Trujillo Report

0

Puede asignar a acc[k] directamente:

 const data = [{ x: 1, y: 2, z: 3 }, { x: 4, y: 7, z: 10 }]; const formattedData = data.reduce((acc, el) => { Object.entries(el).forEach(([k, v]) => { acc[k] = (acc[k] || []).concat(v); }); return acc; }, {}); console.log(formattedData);

Más código pero también más eficiente (menos asignaciones y copias):

 const data = [{ x: 1, y: 2, z: 3 }, { x: 4, y: 7, z: 10 }]; const formattedData = data.reduce((acc, el) => { Object.entries(el).forEach(([k, v]) => { if (!acc[k]) { acc[k] = []; } acc[k].push(v); }); return acc; }, {}); console.log(formattedData);

about 4 years ago · Santiago Trujillo 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!