Хотите обнаружить все слова в строке

Итак, я написал код, который будет обнаруживать все слова, содержащиеся в предложении. Я бы обнаруживал только слова и игнорировал пробелы, а это означает, что даже если в строке есть пустые места, я бы не стал их считать. Но результат не тот, что я ожидал. Вот код:

var mystring = "Hello World"
var indexcount = 0
var words = 0

for (element of mystring) {
  if (element == " " || element[indexcount + 1] != " " || element[indexcount - 1] != " ") {
    var words = words + 1
    var indexcount = indexcount + 1
  } else {
    indexcount = indexcount + 1
  }
}

console.info(words);

Таким образом, этот код на самом деле поможет любому, кто захочет узнать все слова в строке, игнорируя все пробелы. Таким образом, даже если бы у вас было всего одно слово в строке и еще много пробелов, результат был бы 1. Но я получаю странные результаты. пожалуйста помоги

Чего вы пытаетесь достичь с помощью проверок element[indexcount + 1] != " "?

Nick Parsons 04.05.2024 07:12

добавил пояснение к моему ответу

Alexander Nenashev 04.05.2024 10:16
str.split(" ").filter(x => !!x)
derpirscher 04.05.2024 10:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
68
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вот решение, которое вы можете попробовать

function countWords(str) {
  // Split the string into an array of words using the split() method
  const words = str.split(" ");

  // Filter out empty strings (extra spaces) using filter()
  const filteredWords = words.filter(word => word.trim() !== "");

  // Return the length of the filtered array (number of words)
  return filteredWords.length;
}

// Example usage
const myString = "Hello                    ";
const wordCount = countWords(myString);

console.info("Number of words:", wordCount); // Output: Number of words: 1

Спасибо за этот код, но мне хотелось бы знать, почему мой код не работает.

4zac 04.05.2024 06:55

Попробуйте использовать эту функцию:

const countWords = (str) => {
  return str.replace(/\s+/g, ' ').split(' ').length
}
Ответ принят как подходящий

У вас есть несколько ошибок:

  1. Не используйте var после первого использования переменной.
  2. Если элемент не является пробелом, проверьте, есть ли он
    а. первый элемент в строке (indexcount === 0)
    б. или предыдущий символ — это пробел (mystring[index - 1] === ' ')
    Если да, увеличьте количество слов

var mystring = "Hello World"
var indexcount = 0
var words = 0

for (var element of mystring) {
  if (element !== " " && (indexcount === 0 || mystring[indexcount - 1] === " ")) {
    words = words + 1;
  }
  indexcount = indexcount + 1;
}

console.info(words);

Рассмотрите возможность использования конечного автомата:

var mystring = ` Hello 
                 World `;

const spaces = new Set('\t\r\n '.split('')); // detect spaces with a set
let words = 0;
let inWord = false; //whether we are inside of a word or not

for(const char of mystring){
  if (spaces.has(char)){
    inWord = false;
  } else if (!inWord) {
    words++; 
    inWord = true;
  }
}
   
console.info(words);

Вы также можете использовать регулярное выражение:

var mystring = ` Hello 
                 World `;

const words = mystring.match(/(?<=\s|^)(?=\S)/g).length;
   
console.info(words);

Другие вопросы по теме