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

156
Views
¿Cómo resumo un valor de una matriz según la fecha y la identificación?

tengo la siguiente instancia de matriz

 this.array=[{id:"121",score:"5",createdOn:"2022-05-17T19:52:23.6846702+00:00"} {id:"121",score:"8",createdOn:"2022-05-19T13:00:00.6846702+00:00"} {id:"122",score:"7",createdOn:"2022-04-11T08:00:00.6846702+00:00"} {id:"121",score:"1",createdOn:"2022-03-12T12:00:00.6846702+00:00"} ]

¿Cómo obtengo algunos valores con una identificación y un mes coincidentes? por ejemplo, mi salida debería ser

 newArray=[{id:"121",score:13,month:"May"} {id:"122",score:7,month:"April"} {id:"121",score:1,month:"March"} ]

intenté algo como esto

 this.array.forEach(item => { var obj = {} if (obj.hasOwnProperty(item.id)) { obj["id"] = obj[item.id] + parseFloat(item.score); } else { obj["id"] = parseFloat(item.score); } this.newArray.push(obj); });

Pero no funcionó y no sé cómo verificar el mes.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Puede usar un 'agrupar por' bastante estándar usando una clave compuesta de id_month .

El ejemplo usa reduce() para iterar la matriz, toLocaleDateString() para recuperar el nombre del mes de la cadena de fecha ISO y un literal de plantilla para crear la clave compuesta.

La score debe convertirse en un número antes de sumar para evitar una concatenación accidental , aquí usando el operador unario más (+) .

Finalmente, tomamos solo los valores de Object.values del objeto agrupado como resultado.

 const array = [{ id: "121", score: "5", createdOn: "2022-05-17T19:52:23.6846702+00:00" }, { id: "121", score: "8", createdOn: "2022-05-19T13:00:00.6846702+00:00" }, { id: "122", score: "7", createdOn: "2022-04-11T08:00:00.6846702+00:00" }, { id: "121", score: "1", createdOn: "2022-03-12T12:00:00.6846702+00:00" },]; const result = Object.values( array.reduce((a, { id, createdOn, score, ...rest }) => { const month = new Date(createdOn).toLocaleDateString('en', { month: 'long' }); a[`${id}_${month}`] ??= { id, month, score: 0, ...rest }; a[`${id}_${month}`].score += +score; return a; }, {}) ) console.log(result)

Se puede usar exactamente la misma lógica en un bucle for...of estándar en lugar de dentro de una llamada reduce() si lo prefiere.

 const array = [{ id: "121", score: "5", createdOn: "2022-05-17T19:52:23.6846702+00:00" }, { id: "121", score: "8", createdOn: "2022-05-19T13:00:00.6846702+00:00" }, { id: "122", score: "7", createdOn: "2022-04-11T08:00:00.6846702+00:00" }, { id: "121", score: "1", createdOn: "2022-03-12T12:00:00.6846702+00:00" },]; const grouped = {} for (const { id, createdOn, score, ...rest } of array) { const month = new Date(createdOn).toLocaleDateString('en', { month: 'long' }); grouped[`${id}_${month}`] ??= { id, month, score: 0, ...rest } grouped[`${id}_${month}`].score += +score; } const result = Object.values(grouped); console.log(result)

about 4 years ago · Juan Pablo Isaza Report

0

  1. Utilice un objeto temporal para contener la información actualizada.

  2. Debido a que necesita separar los objetos que tienen las mismas identificaciones pero que se crearon en diferentes meses, puede usar una clave id-month en el objeto temporal para identificarlos.

  3. Recorra la matriz de objetos que obtienen el nombre del mes y cree la clave. (He usado Intl.DateTimeFormat aquí porque puede pasar una cadena de idioma para obtener un resultado diferente de la función; intente 'es-ES' por ejemplo).

  4. Si la propiedad con esa clave no existe en el objeto temporal, agregue un objeto predeterminado al objeto temporal con un valor de objeto predeterminado y luego aumente su score (asegúrese de forzarlo a un número primero).

  5. Finalmente obtenga Object.values que devolverá una matriz de todos esos valores en el objeto temporal.

 const arr=[{id:"121",score:"5",createdOn:"2022-05-17T19:52:23.6846702+00:00"},{id:"121",score:"8",createdOn:"2022-05-19T13:00:00.6846702+00:00"},{id:"122",score:"7",createdOn:"2022-04-11T08:00:00.6846702+00:00"},{id:"121",score:"1",createdOn:"2022-03-12T12:00:00.6846702+00:00"}]; const temp = {}; const language = 'en-GB'; function getMonth(createdOn, language) { const date = new Date(createdOn); return new Intl.DateTimeFormat(language, { month: 'long' }).format(date); } for (const obj of arr) { const { id, score, createdOn } = obj; const month = getMonth(createdOn, language); const key = `${id}-${month}`; temp[key] ??= { id, score: 0, month }; temp[key].score += Number(score); } console.log(Object.values(temp));

Documentación adicional

  • Asignación de desestructuración

  • para/de

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!