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

93
Vistas
¿Cómo se aplicaría el concepto de DRY para tareas repetitivas de mapeo de matrices?

Dado el siguiente código...

 // last 7 days data from db ... let last7Days = result.map((data) => data._id).slice(1).slice(-7); let last7daysIncome = result.map((data) => data.totalIncomeAmount).slice(1).slice(-7); let last7daysAvgIncome = result.map((data)=> data.avrageIncome).slice(1).slice(-7); let last7daysPatientionsCount = result.map((data)=> data.PatientionsCount).slice(1).slice(-7); let last7disease = result.map((data)=>data.diseaseArr).slice(1).slice(-7);

... ¿cómo se simplificaría este código con el concepto DRY ( No te repitas a ti mismo) en JavaScript?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Cree una función, envíe el parámetro para el campo que desea extraer e incluso la cantidad de días para mirar hacia atrás:

 function lastDays(result, field, days) { return result.slice(days).map((data)=>data[field]); } function lastSevenDays(result, field) { return lastDays(result, field, -7); } let last7Days = lastSevenDays(result, "_id") let last7daysIncome = lastSevenDays(result, "totalIncomeAmount") let last7daysAvgIncome =lastSevenDays(result, "avrageIncome") let last7daysPatientionsCount = lastSevenDays(result, "PatientionsCount") let last7disease = lastSevenDays(result, "diseaseArr")
about 4 years ago · Juan Pablo Isaza Denunciar

0

Dado que el OP obviamente mapea 5 veces una matriz de elementos de datos, cada vez que recopila otro valor de propiedad específico de dicho elemento, se podría idear un enfoque que resuelva la fusión y la recopilación de entradas de elementos de una manera genérica (agnóstica a la estructura de datos subyacente ).

La combinación de elementos de matriz en un objeto de matrices agrupadas es una tarea de reduce clásica que, con la siguiente solución proporcionada (debido a su implementación genérica), se realiza dos veces.

Además, la siguiente implementación utiliza Object.entries para acceder directamente al par clave-valor de cada entrada. También utiliza el operador de asignación lógica nula / ??= para acceder o crear/asignar una matriz con una línea de código.

 function mergeAndCollectItemEntries(result, item) { return Object .entries(item) .reduce((merger, [key, value]) => { (merger[key] ??= []).push(value); return merger; }, result); } const sampleData = [ { _id: 'foo', totalIncomeAmount: 10_000, last7daysAvgIncome: 2_500, PatientionsCount: 123, diseaseArr: ['long', 'sick', 'leave'] }, { _id: 'bar', totalIncomeAmount: 8_000, last7daysAvgIncome: 2_000, PatientionsCount: 99, diseaseArr: ['very', 'long', 'sick', 'leave'] }, { _id: 'baz', totalIncomeAmount: 4_000, last7daysAvgIncome: 1_000, PatientionsCount: 50, diseaseArr: ['really', 'long', 'sick', 'leave'] }, ]; const { _id: last7Days, totalIncomeAmount: last7daysIncome, last7daysAvgIncome: avrageIncome, PatientionsCount: last7daysPatientionsCount, diseaseArr: last7disease, } = sampleData.slice(-7).reduce(mergeAndCollectItemEntries, {}); console.log({ last7Days, last7daysIncome, avrageIncome, last7daysPatientionsCount, last7disease, } ); // was before ... // // // last 7 days data from db... // // let last7Days = // result.map((data)=>data._id).slice(1).slice(-7); // // let last7daysIncome = // result.map((data) => data.totalIncomeAmount).slice(1).slice(-7); // // let last7daysAvgIncome = // result.map((data)=> data.avrageIncome).slice(1).slice(-7); // // let last7daysPatientionsCount = // result.map((data)=> data.PatientionsCount).slice(1).slice(-7); // // let last7disease = // result.map((data)=>data.diseaseArr).slice(1).slice(-7);
 .as-console-wrapper { min-height: 100%!important; top: 0; }

about 4 years ago · Juan Pablo Isaza 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