Cómo crear una función array.reduce reutilizable
Estoy trabajando en resolver un problema de Anagramas y quiero ser ingenioso con los métodos de Javascript.
Aquí está mi código:
const stringA = ["hello"]
const stringB = ["olhle"]
let cleanStrA = stringA.replace(/[^\w]/g, '').toLowerCase().split('')
let cleanStrB = stringB.replace(/[^\w]/g, '').toLowerCase().split('')
function charMap (str) {
str.reduce((acc, cur) => {
acc[cur] = acc[cur] + 1 || 1
return acc
},{})
return str
}
let buildCharMapA = charMap(cleanStrA)
let buildCharMapB = charMap(cleanStrB)
console.log(buildCharMapA)
result = ("hello")
Cuando imprimo en la consola, devuelve el arreglo original, pero cuando elimino la función que engloba al método reduce, crea el objeto deseado.
let reduceFn = cleanStrA.reduce((acc, cur) => {
acc[cur] = acc[cur] + 1 || 1
return acc
},{})
console.log(reduceFn)
result = {h:1, e:1, etc.}
¿Por qué sucede esto?
davy.ai
Parece que la función
charMap
no está devolviendo correctamente el objeto actualizado con los conteos de frecuencia de los caracteres. En su lugar, está devolviendo el array original pasado como argumentostr
. Para solucionar esto, puedes modificar la funcióncharMap
para que devuelva correctamente el objeto actualizado asignando el resultado del métodoreduce
a una variable y devolviendo esa variable. Aquí está el código actualizado:Con este cambio, llamar a
charMap(cleanStrA)
debería devolver el objeto esperado con los conteos de frecuencia de los caracteres.