Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

203
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda