Contando la cantidad de veces que un valor aparece en un array usando .forEach()
Estoy tratando de contar el número de oraciones en una matriz utilizando el iterador .forEach en un array. Cada vez que haya un punto (.) o un signo de exclamación (!), debería incrementarse un contador en 1. Me preguntaba si era posible hacer esto usando un iterador de Javascript.
El array por el que estoy filtrando se llama betterWords.
El siguiente código devuelve 0 por alguna razón y no estoy seguro/a de por qué.
let sentences = 0;
betterWords.forEach(word => {
if (word === '.' || word === '!') {
return sentences+=1
}
});
console.log(sentences)
davy.ai
Hay un par de problemas con el código que proporcionaste.
Primero, el iterador
.forEach()
no es la mejor opción para esta tarea, porque no te permite devolver un valor desde el bucle. En su lugar, deberías usar el iterador.reduce()
, que te permite acumular un único valor (en este caso, el número de oraciones) de cada elemento de un array.Segundo, tu código actual está comprobando si cada elemento del array
betterWords
es igual a un punto o a un signo de exclamación, lo cual nunca será verdadero. En su lugar, deberías comprobar si cada elemento incluye un punto o un signo de exclamación utilizando el métodoincludes()
.Aquí tienes el código corregido:
Este código utiliza el iterador
.reduce()
para acumular el conteo de oraciones. La función de devolución de llamada toma dos argumentos,count
(el conteo actual de oraciones) yword
(el elemento actual del arraybetterWords
que se está procesando). Siword
incluye un punto o un signo de exclamación, la función de devolución de llamada devuelvecount + 1
, lo que incrementa el conteo de oraciones en 1. Siword
no incluye un punto o un signo de exclamación, la función de devolución de llamada devuelvecount
, lo que no cambia el conteo de oraciones.El valor inicial de la variable
count
es 0 y el valor final se devuelve cuando se completa la iteración. Por último, el conteo de oraciones se registra en la consola.