Не могу понять почему revOddWord("Dear Santa, give me a new iPhone") не работает коректно

Рейтинг: 1Ответов: 1Опубликовано: 03.05.2023

Есть строка, переверните все слова нечетной длины. Слова четной длины не изменяются. 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

Лучше всего использовать регулярное выражение:

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"></input><br/>
Вывод: <a id="result"></a>