@yagyar001

Почему не срабатывает условие (подсчет слов в тексте)?

Всем привет. Учу js. Тренируюсь с инпутами. Нужно подсчитать количество слов в тексте. Но у меня выходит ошибка. Что сделал не так? В цикле я проверяю слова на наличие запятых и точек без пробелов, чтобы их так же разбить в массив и посчитать количество слов.
<p>Введите текст</p>
<input type="text" id="text">

let text = document.querySelector('#text');
// При потере фокуса считаю количество слов
text.addEventListener('blur', function(){
	if (text.value.length < 1) {
		alert('ошибка');
	} else {
		let res = text.value.split(' ');  // разбил текст в массив (разделитель пробел)
		for (var i = 0; i < res.length; i++) {  // Начал искать запятые и точки без пробелов
			for (var j = 0; j < res[i].length; j++) {
				if (res[i][j] == ',') {
					let res2 = res[i].split(','); // если есть запятая без пробела - разбил слово в массив
				} 
				else if (res[i][j] == '.') {
					let res2 = res[i].split('.'); // если есть точка без пробела - разбил слово в массив
				}
			};
		};
	}
	console.log(res);
	console.log(res2);
});
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Хорошие решения приходят в голову при чтении документации. Например, метод строки split() в качестве разделителя может принимать не только строку, а и регулярное выражение.

Логика вашего скрипта: разбить текст по пробелу ИЛИ запятой ИЛИ точке. Регулярка для этого - группа символов в квадратных скобках: /[ ,.]/ — будет соответствовать пробелу или запятой или точке.

Подвох в том, что могут получаться пустые строки как элементы массива. Например, из "test one." получится ["test", "one", ""] Поэтому стоит пройтись по массиву, оставив в нём только строки ненулевой длины: arr.filter(w => w.length > 0)

Ну и взять длину полученного массива.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы