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"]))
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 siemprecounter
valdrá0
ya que evalua comoundefined
.Para no perder los datos de pasadas iteraciones usamos spread operator.
Top comments (4)
el año pasado hice todos los ejercicios de Paracetamol.JS, y que bueno las sigas publicando este año
Gracias por tu comentario! Este año tengo pensando hacer un Paracetalmol.ts...
Muy buenos tus explicaciones.
muchas gracias por tu comentario