需要帮助来反转一串单词

Sau*_*abh 4 javascript arrays algorithm ecmascript-6

当我在函数中传递以下字符串作为参数时,如何获得以下输出?

  • 输入: "Reverse this line"

  • 输出: "esreveR siht enil"

这是我的代码

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");
Run Code Online (Sandbox Code Playgroud)

这将作为输出返回:

"R eR veR eveR reveR sreveR esreveR t ht iht siht l il nil enil"
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

Mar*_*šak 10

您可以将字符串拆分为单词并映射每个单词,将其拆分为字符数组并反转数组,然后将单词连接回单个字符串.像这样:

string.split(' ').map(s => s.split('').reverse().join('')).join(' ')
Run Code Online (Sandbox Code Playgroud)

解释代码:

string.split(' ')
Run Code Online (Sandbox Code Playgroud)

这一行将整个字符串分成单词数组,"Reverse this line"变成["Reverse", "this", "line"](注意空格已经消失).请记住,双倍空格仍将作为单个空格分割.

由于我们现在有一个数组,您可以使用该.map函数迭代整个字符串.它与您尝试使用的方式类似.forEach,区别在于.map函数将返回一个新数组,其中包含在.map回调函数的每次迭代中返回的修改值.确保返回一些东西,否则价值将会是undefined!正如您在上面的示例中所看到的,ES2015 +中的箭头函数具有隐式返回,但是如果您要使用=> {...},则块需要一个显式return语句才能工作.

.map函数回调的代码

s => s.split('').reverse().join('')
Run Code Online (Sandbox Code Playgroud)

接收a s,这是上面数组中的单个单词,将单词拆分为空字符串,这是将字符串拆分为字符的解决方法.例如,"Reverse"成为["R", "e", "v", "e", "r", "s", "e"].该.reverse()函数的名称非常具有描述性,它只是反转数组.不过要小心!它改变了数组,所以如果你.reverse()在一个随机数组上调用该函数,它将从该行反转.如果你不小心,这可能会导致一些问题.最后,.join('')将反转的字符数组放回单个字符串字中.

最后.join(' '),最后将映射的数组(现在包含反转的单词)与中间的空格一起放回,类似于如何.join('')将字符数组放回单个单词中.

  • @Pedro这不能正常工作.再仔细看看预期的输出.OP希望还原每个单词,而不是整个字符串. (2认同)

Mat*_*ran 6

具体使用您的代码,您非常接近您想要做的事情.您只需要将reversedWord变量的声明移出forEach循环,在forEach循环内部进行更新,最终将使用整个反向单词进行定义.

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");
Run Code Online (Sandbox Code Playgroud)