Не могу понять почему revOddWord("Dear Santa, give me a new iPhone") не работает коректно
Есть строка, переверните все слова нечетной длины. Слова четной длины не изменяются. revOddWord("Egg") ➞ "ggE" revOddWord ("It is false") ➞ "It is eslaf" revOddWord ("Dear Santa, give me a new iPhone”)➞ "Dear atnaS, give me a wen iPhone. "
function revOddWord(str) {
const punctuationMarks = [",", ".", "!", "?", ";", ":", "-",];
const words = str.split(" ");
for (let i = 0; i < words.length; i++) {
if (words[i].length % 2 !== 0) {
words[i] = words[i].split("").reverse().join("");
}
if (punctuationMarks.includes(words[i])) {
str = words.slice(0, i) + words.slice(i + 1);
i--;
}
}
return words.join(" ");
return punctuationMarks.join(",");
}
console.log(revOddWord("Egg"));
console.log(revOddWord("It is false"));
console.log(revOddWord("Dear Santa, give me a new iPhone")); ```
Ответы (1 шт):
Автор решения: anton
→ Ссылка
Лучше всего использовать регулярное выражение:
function revOddWord(str) {
return str
.replaceAll(/\w+/g, word => word.length % 2 !== 0
? word
.split("")
.reverse()
.join("")
: word);
}
console.log(revOddWord("Egg"));
console.log(revOddWord("It is false"));
console.log(revOddWord("Dear Santa, give me a new iPhone."));
// Вывод:
// ggE
// It is eslaf
// Dear atnaS, give me a wen iPhone.
Ввод: <input id="target" oninput="document.getElementById('result').innerText = revOddWord(this.value); return true;"></input><br/>
Вывод: <a id="result"></a>