Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

321
Vistas
JavaScript intenta imprimir el número de veces que aparece una letra en la cadena, pero se imprime más de una vez

En el siguiente código, estoy tratando de verificar cuántas veces aparece una letra en una cadena. El problema con el siguiente código es que imprime cada letra más de una vez. Necesita recopilar todas las mismas letras y mostrar la cantidad de veces que ocurre en la cadena y mostrarlo una vez.

 const string = 'mississippi' const letters = [...string] let currentLetter = '' let letterOccurance = [] for(let i = 0; i < letters.length; i++){ let letterFrequency = letters.filter((letter)=>{ return letter === letters[i] }) letterOccurance.push([`${letters[i]}`,letterFrequency.length]) } console.log(letterOccurance)

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Eso es demasiado código solo para obtener la cantidad de veces que aparece una letra en una cadena. Prueba el siguiente código:

 const string = 'mississippi'; let frequency = {}; for (let letter of string) { if (frequency[letter]) { frequency[letter]++; } else { frequency[letter] = 1; } } console.log(frequency);

about 4 years ago · Santiago Trujillo Denunciar

0

Siempre está empujando la letra a la matriz, ya sea que exista allí o no:

 letterOccurance.push([`${letters[i]}`,letterFrequency.length])

Podrías verificar si existe primero:

 if (!letterOccurance.find(l => l[0] === letters[i])) { letterOccurance.push([`${letters[i]}`,letterFrequency.length]) }

O incluso sáltatelo por completo si ya lo has visto, ya que la primera vez que encuentras alguna letra ya sabes su cuenta completa:

 for(let i = 0; i < letters.length; i++){ if (letterOccurance.find(l => l[0] === letters[i])) { continue; } // the rest of the loop... }

Honestamente, hay una variedad de formas en las que puedes dar un paso atrás y volver a abordar el problema. Pero para la pregunta sobre por qué las letras se repiten, eso es simplemente porque cada iteración del bucle agrega incondicionalmente la letra a la matriz resultante.

about 4 years ago · Santiago Trujillo Denunciar

0

¿Qué tal si escribimos una función de conteo de elementos más genérica y luego colocamos en capas countLetters como una simple aplicación parcial de la función de identidad?

 const countBy = (fn) => ([...xs]) => xs .reduce ((a, x) => {const k = fn (x); a [k] = (a[k] || 0) + 1; return a}, {}) const countLetters = countBy (x => x) console .log (countLetters ('missisippi'))

countBy es bastante genérico. Le pasa una función para convertir sus valores en cadenas y pasa su matriz de elementos a la función que devuelve. Las cadenas son lo suficientemente parecidas a una matriz como para que esto solo funcione para nuestro simple countLetters . Pero también podríamos usarlo para otros cargos, como:

 countBy (x => x .grade) ([{id: 1, grade: 'A'}, {id: 2, grade: 'B'}, {id: 3, grade: 'A'}]) //=> {"A": 2, "B": 1}
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda