Estoy tratando de contar la cantidad de oraciones en una matriz usando el iterador .forEach en una matriz. Cada vez que hay un punto ('.') o un signo de exclamación ('!'), debería incrementar un contador en 1. Me preguntaba si era posible hacer esto usando un iterador de Javascript.
La matriz por la que estoy filtrando se llama betterWords.
El siguiente código devuelve 0 por alguna razón y no estoy seguro de por qué.
let sentences = 0; betterWords.forEach(word => { if (word === '.' || word === '!') { return sentences+=1 } }); console.log(sentences)Deduzco que el OP tiene como objetivo contar oraciones en una cadena contando signos de puntuación que terminan oraciones como . ! ? (¿Me perdí alguno?) Una coincidencia de expresiones regulares lo hará. Solo cuenta los partidos.
const countPunctuation = string => { return (string.match(/[.!?]/g) || []).length } console.log(countPunctuation("This is a sentence. This is definitely a sentence! Is this a sentence?"))Su solución fue casi correcta:
const betterWords = "Hello World! This is a nice text. Awesome!" let sentences = 0; betterWords.split('').forEach(word => { if (word === '.' || word === '!') { return sentences += 1 } }); console.log(sentences) No puede ejecutar .forEach en cadenas . Solo puede hacer esto en Arrays. Con split('') puedes transformar tu cadena en una matriz . "ABC" => ["A", "B", "C"]
Usar Regex como lo hizo @danh es una forma más rápida de resolver este problema.