Need help reversing a line of words

How can I get the following output when I pass the next line in a function as an argument?

  • input: "Reverse this line"

  • conclusion: "esreveR siht enil"

this is my code

function reverseWords(string) {
    var wordArray = string.split(" ");
    var resultWordArray = [];
    var requiredSentance;
    wordArray.forEach(word => {
        if (word == " ") {
            var space = " ";
            resultWordArray.push(space);
        } else {
            var SplittedWord = word.split("");
            var reversedWordsLettersArray = [];
            SplittedWord.forEach(letter => {
                reversedWordsLettersArray.unshift(letter);
                var reversedWord = reversedWordsLettersArray.join("");
                resultWordArray.push(reversedWord);
            })
        }
    })
    var resultSentance = resultWordArray.join(" ");
    console.log(resultSentance);
}
reverseWords("Reverse this line");

which returns this as output:

"R eR veR eveR reveR sreveR esreveR t ht iht siht l il nil enil"

What am I missing here?

+4
source share
4 answers

Using your code, you are very close to what you are trying to do. You just need to move the variable declaration reversedWordfrom the loop forEach, update inside the loop forEach, which will ultimately be defined with all the inverse word.

function reverseWords(string) {

var wordArray = string.split(" ");
var resultWordArray = [];
var requiredSentance;

wordArray.forEach(word => {

  if (word == " ") {
    var space = " ";
    resultWordArray.push(space);

  } else {
    var SplittedWord = word.split("");
    var reversedWordsLettersArray = [];
    var reversedWord; //define variable here 

    SplittedWord.forEach(letter => {
      reversedWordsLettersArray.unshift(letter);
      reversedWord = reversedWordsLettersArray.join("");
    })
    resultWordArray.push(reversedWord); // push it here
  }
})

var resultSentance = resultWordArray.join(" ");
  console.log(resultSentance);
}


reverseWords("Reverse this line");
+6
source

You can split a line into words and display each word by breaking it into an array of characters and cancel the array, and then join the words to one line. Like this:

string.split(' ').map(s => s.split('').reverse().join('')).join(' ')

:

string.split(' ')

, "Reverse this line" ["Reverse", "this", "line"] ( , ). , - .

, .map. , .forEach, , .map , .map. -, undefined! ES2015 + , , => {...}, return.

.map

s => s.split('').reverse().join('')

s, , , . , "Reverse" ["R", "e", "v", "e", "r", "s", "e"]. .reverse() , . ! , , .reverse() , . , . , .join('') .

, .join(' ') , , , , .join('') .

+10

, .map(), :

function reverseWords(string, delimiter = ' ') {
  return string
    .split('').reverse().join('')
    .split(delimiter).reverse().join(delimiter);
}

console.log(reverseWords('Reverse this line'));
Hide result

, ( ' ') , .

, , .

, :

function reverseWords(string, delimiter = ' ') {
  return string
    .split('').reverse().join('')
    .split(delimiter).reverse().join(delimiter);
}

console.log(reverseWords('Reverse	this	line', '\t'));
Hide result
+1

, :

function reverseWords(string){
  return (function f(str, i, reversed){
    if (!str[i])
      return reversed;

    if (str[i] == ' ')
      return reversed + ' ' + f(str, i + 1, '');

    return f(str, i + 1, str[i] + reversed);
  })(string, 0, '');
}

console.log(reverseWords("Reverse this line"));
+1

Source: https://habr.com/ru/post/1693329/


All Articles