Paracetamol.js💊| #195: Explica este código JavaScript

Cristian Fernando - Jan 6 '23 - - Dev Community

Explica este código JavaScript

Dificultad: Intermedio

const getCouter = (arr = []) => {
  return arr.reduce((acum, item) => {
    const counter = acum[item] ?? 0;
    return {
      ...acum,
      [item]: counter + 1
    }
  }, {})
} 

console.log(getCouter(["Juan", "Cris", "Juan", "Pedro"]))
Enter fullscreen mode Exit fullscreen mode

A. { "Cris":1, "Juan":1, "Pedro":1 }
B. { "Cris":1, "Juan":2, "Pedro":1 }
C. {}
D. Ninguno de los anteriores

Respuesta en el primer comentario.


Respuesta:
B. { "Cris":1, "Juan":2, "Pedro":1 }

La función getCounter recibe un arreglo y regresa un objeto contabilizando cuantas veces se repite cada item de dicho arreglo.

El método reduce es excelente para este caso de uso:

iteración acum item counter
1ra {} "Juan" 0
2da {"Juan":1} "Cris" 0
3ra {"Juan":1, "Cris":1} "Juan" 1
4ta {"Juan":2, "Cris":1} "Pedro" 0
5ta {"Juan":2, "Cris":1, "Pedro":1} - -

Algunos aspectos interesantes que mencionar:

  • Nota como se aprovecha el operador ?? ya que cuando haya un nuevo nombre que evaluar en el arreglo, entonces siempre counter valdrá 0 ya que evalua como undefined.

  • Para no perder los datos de pasadas iteraciones usamos spread operator.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .