Метод reverse, нужно перевернуть не строку, а каждую букву в слове, с сохранением порядка слов

function revBySep(str, sep) {
    return str.split(sep).reverse().join(sep);
}

var str = "I want to become a JavaScript Ninja!";
console.log(revBySep(str, "")); 
console.log(revBySep(str, " "));

в первом консоле !ajniN tpircSavaJ a emoceb ot tnaw I - вот тут все корректно как я хочу во втором должно быть I tnaw ot emoceb a tpircSavaJ !ajniN - вот тут должен получить такой ввывод, подскажите, где я не там свернул)


Ответы (2 шт):

Автор решения: vsemozhetbyt

Боюсь, у вас не выйдет обойтись здесь одной функцией. Для второго случая нужно отдельно пройтись по каждому слову:

function revBySep(str, sep) {
    return str.split(sep)
      .map(word => [...word].reverse().join(''))
      .join(sep);
}

var str = "I want to become a JavaScript Ninja!";
console.log(revBySep(str, " "));

→ Ссылка
Автор решения: OPTIMUS PRIME

Функция написана правильно, но использована неверно.

function revBySep(str, sep) {
  return str.split(sep).reverse().join(sep);
}

При вызове, она создает локальную переменную str, которая не имеет никакого отношения к внешней строке. Получила строку - вернула другую строку. Дважды вызывая её - вы никуда не сохраняете результат первого вызова, и получаете два независимых результата от сработвашей функции.

Вместо исходной строки, во второй вызов функции нужно отправить результат вызова первой:

function revBySep(str, sep) {
  return str.split(sep).reverse().join(sep);
}

var str = "I want to become a JavaScript Ninja!";

let step_1 = revBySep(str, "");
let step_2 = revBySep( step_1 , " ");

console.log(step_1);
console.log(step_2);

→ Ссылка