При впушивании строки в массив, выводит undefined
Пользуясь случаем хочу спросить мнение о решении задачки - "Ввести с клавиатуры текст предложения, завершить точкой. Сформировать новую строку на основе исходной, в которой после каждого слова в скобках указать номер слова в предложении (слова разделяются запятыми, пробелами или тире). Например, если введено «Донецк – прекрасный город», результирующая строка должна выглядеть так: «Донецк(1) – прекрасный(2) город(3)».
Хочу выводить слова в массив а потом брать их из массива и соединять с каким то countom в строке, есть ли решение получше? Надо решать через обработку строки как массива!!!
А вот собственно сам код, почему вместо строк, слов. В массиве появляется undefined? как исправить такое поведение?
let prom = "Донецк - прекрасный город";
function asd(prom) {
var arr2 = [];
for (i = 0; i < prom.length; i++) {
let count = 0
if (prom[i] == " ") {
arr2.push(prom[count - i])
count = i
}
}
return arr2
}
console.log(asd(prom))
Ответы (2 шт):
undefined потому что count - i уходит в минус соответственно по отрицательному индексу в строке нет значения.
let prom = "Донецк - прекрасный, город";
let n = 1;
function asd(prom) {
let m = prom.split(" ")
let res = m.map((e,i)=>{
let nn = n;
if(e.includes("-")) {
return e
}
if(e.includes(",")){
n++;
return `${e.slice(0,e.length-1)}(${nn})${e[e.length-1]}`;
}
if(!e.includes("-")){
n++;
return `${e}(${nn})`
}
})
return res.join(" ")
}
console.log(asd(prom))
- на каждой итерации цикла обнуляется
count, поэтому индекс всегда отрицательный, и, следовательно результатprom[count - i]-undefined prom[count - i]- это получение одной буквы, а не подстроки. Для получения подстроки можно воспользоваться методом.sliceлибо.substring- алгоритм может выглядеть следующим образом:
- пробег по символам строки
- если символ - разделитель и предыдущий символ был буквой - добавляем в результат номер слова
- добавляем в результат текущий символ
let prom = "Донецк - прекрасный город";
function asd(prom) {
var count = 1;
var res = '';
for (i = 0; i < prom.length; i++) {
if ((prom[i] == " " || prom[i] == "-") && // проверяем разделители
prom[i - 1].match(/\p{Alpha}/iu)) { // проверяем что предыдущий символ - буква
res += '(' + count + ')';
count += 1;
}
res += prom[i];
}
if (prom[prom.length - 1].match(/\p{Alpha}/iu)) { // если последний символ был буквой - учитываем последнее слово
res += '(' + count + ')';
}
return res;
}
console.log(asd(prom))