JavaScript: Не получается добавить в массив отдельные слова из строки
Всем привет!
Недавно начал изучать javascript, до этого немного баловался java, возможно, поэтому и возникла проблема ниже. Нужно с помощью цикла из строки взять отдельные слова и их вставить в пустой массив, не используя метод split(). Пробовал код ниже, но выдает пустой массив. Подскажите. в чем проблема.
let sentence = 'Всем большой привет';
let list = [];
let word;
let start = 0;
for (var i = 0; i < sentence.length; i++) {
if (sentence.charAt(i) == " ") {
word = sentence.substring(start, i);
list.push(word);
start = i;
}
}
console.log(list);
Ответы (3 шт):
Автор решения: novvember
→ Ссылка
- У вас лишняя
;внутри циклаforмежду условием и телом цикла. Поэтому все в принципе ломается, цикл не выполняется, а результат — пустой массив. start— это позиция пробела. С текущим кодом пробел войдет в следующее слово. поэтому лучше сдвинуться на 1 позицию дальше- Вы слова ищите от прошлого места до пробела. Так последнее слово вы не найдете (после него же нет пробела). Как минимум просто прибавьте к строке пробел.
let sentence = 'Всем большой привет';
sentence += ' ';
let list = [];
let word;
let start = 0;
for (var i = 0; i < sentence.length; i++) {
if (sentence.charAt(i) == " ") {
word = sentence.substring(start, i);
list.push(word);
start = i + 1;
}
}
console.log(list);
Автор решения: Евгений Колмак
→ Ссылка
const string = 'Всем большой привет';
const splitString = text => {
const str = text + ' ';
const result = [];
let word = '';
for (const symbol of str) {
if (symbol !== ' ') {
word += symbol
} else {
result.push(word);
word = '';
}
}
return result;
}
console.log(splitString(string));
Автор решения: EzioMercer
→ Ссылка
Если вдруг нужен вариант с игнорированием любых пробелов, то вот он:
const sentence = ' Всем большой привет ';
const words = [];
let word = -1;
let startNewWord = true;
for (const symbol of sentence) {
if (symbol === ' ') {
if (startNewWord === false) startNewWord = true;
continue;
}
if (startNewWord) {
words[++word] = '';
startNewWord = false;
}
words[word] += symbol;
}
console.log(words);
- Строки в JS прекрасно позволяют брать нужный символ как из массива с помощью
string[i], потому не вижу нужды в данном месте использовать методcharAt(i) - Сравнения лучше делать с
===, а не== - Если у вас в коде есть
ifбезelse, то не стоит пихать весь код вif, лучше вытащить всё изif, а вifнаписать обратное условие. Так код будет намного легче читать и понимать. Я понимаю что это не всегда возможно и нужно (например если всего 1 команда вif), но поверьте моему опыту в очень многих случаях это возможно - Избегайте операций со строками как можно больше. В данном случае вам просто надо один раз пройтись по всем символам, а если каждый раз брать подстроку, то это скажется на скорости работы в больших строках