es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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 argumento str. Para solucionar esto, puedes modificar la función charMap para que devuelva correctamente el objeto actualizado asignando el resultado del método reduce a una variable y devolviendo esa variable. Aquí está el código actualizado:

    function charMap(str) {
      const charCounts = str.reduce((acc, cur) => {
        acc[cur] = acc[cur] + 1 || 1;
        return acc;
      }, {});
      return charCounts;
    }
    

    Con este cambio, llamar a charMap(cleanStrA) debería devolver el objeto esperado con los conteos de frecuencia de los caracteres.

Comments are closed.