Javascript For循环if语句在第一种情况下停止

Javascript For循环if语句在第一种情况下停止,javascript,Javascript,挑战: 编写一个函数,该函数接受一个或多个单词的字符串,并返回相同的字符串,但所有五个或多个字母单词都颠倒(就像这个Kata的名称一样)。传入的字符串将仅由字母和空格组成。只有存在多个单词时,才会包含空格 例如: spinWords(“嘿,勇士们”)=>返回“嘿,wollef sroirraw” 现在我有这个 function spinWords(str) { var splitArray = str.split(' ') for (var i = 0; i < splitArra

挑战: 编写一个函数,该函数接受一个或多个单词的字符串,并返回相同的字符串,但所有五个或多个字母单词都颠倒(就像这个Kata的名称一样)。传入的字符串将仅由字母和空格组成。只有存在多个单词时,才会包含空格

例如:
spinWords(“嘿,勇士们”)
=>返回
“嘿,wollef sroirraw”

现在我有这个

function spinWords(str) {
  var splitArray = str.split(' ')
  for (var i = 0; i < splitArray.length; i++) {
    if (splitArray[i].length > 5) {
      var long = splitArray[i].split('').reverse('').join('')
      return long
      i++
    } else {
      var short = splitArray[i]
      return short
      i++
    }
  }
}
函数自旋字(str){
var splitArray=str.split(“”)
对于(var i=0;i5){
var long=splitArray[i]。拆分(“”)。反转(“”)。连接(“”)
回程
我++
}否则{
var short=splitArray[i]
短报
我++
}
}
}
正如我在标题中所说的,这可以正常工作,但只会返回数组中的第一个元素,无论是否颠倒。有谁比我聪明,请解释一下为什么循环不循环?
感谢您抽出时间。

要使此代码正常工作,必须更改三件事

首先
return
语句将完成整个函数的执行。因此,当不再执行代码时,它应该放在正文的末尾

您可以切换正在迭代的值,然后使用第一行的反向操作(
.join(“”)
)返回相同的数组

第三
如果在参数中定义了索引计数器,则for循环的
已经在每次迭代结束时增加了它。循环体中不需要
i++

函数自旋字(str){
var splitArray=str.split(“”);
对于(var i=0;i=5){
var long=splitArray[i]
.拆分(“”)
.反面(“”)
.加入(“”);
splitArray[i]=长;
}
}
返回splitArray.join(“”)
}
编辑:不需要
else
语句


编辑2:我忘了第三个需要的零钱了

谢谢大家的帮助。 这是我根据你的提示给出的答案

 var splitArray = str.split(' ') 
 var finalArray = []
  for (var i = 0; i < splitArray.length; i++) {
  if (splitArray[i].length >= 5) {
    var long = splitArray[i].split('').reverse('').join('')
  finalArray.push(long)
    
  }
    else {
     var short = splitArray[i]
     finalArray.push(short)
    }
    
    
}
  return finalArray.join(' ')
}
var splitArray=str.split(“”)
var finalArray=[]
对于(var i=0;i=5){
var long=splitArray[i]。拆分(“”)。反转(“”)。连接(“”)
最后推(长)
}
否则{
var short=splitArray[i]
最后推(短)
}
}
返回finalArray.join(“”)
}
你就快到了

  • 使用for循环,您不想再做一次i++
  • 你说过会有5个或更多。。所以它应该是>=5
  • return终止for循环,所以最后使用它
  • 修改后的函数可以如下所示:

    function spinWords(str){
     var splitArray = str.split(' ');
     var spinnedWords = '';
      for (var i = 0; i < splitArray.length; i++) {
        if (splitArray[i].length >= 5) {
          var long = splitArray[i].split('').reverse('').join('');
          spinnedWords = spinnedWords.concat(' ' + long);
        }
        else {
         var short = splitArray[i]
         spinnedWords = spinnedWords.concat(' ' + short);
        }
      }
      return spinnedWords.trim();
    }
    
    函数自旋字(str){
    var splitArray=str.split(“”);
    var spinnedWords='';
    对于(var i=0;i=5){
    var long=splitArray[i]。拆分(“”)。反向(“”)。连接(“”);
    spinnedWords=spinnedWords.concat(“”+长);
    }
    否则{
    var short=splitArray[i]
    spinnedWords=spinnedWords.concat(“”+短);
    }
    }
    返回spinnedWords.trim();
    }
    
    返回结束函数。 另一种方法

    const spinWords=words=>
    话
    .拆分(“”)
    .map(word=>(word.length>=5?[…word].reverse().join(“”:word))
    .加入(“”);
    log(spinWords(“嘿,勇士们”)
    
    函数自旋字(str){
    返回str
    .拆分(“”)
    .map(word=>word.length>=5?word.split(“”).reverse().join(“”):word)
    .加入(“”);
    }
    
    log(spinWords(“嘿,勇士们”)
    return
    终止函数在
    return
    语句之后不运行任何代码。请将其放在函数的末尾。您需要将每次迭代的结果连接到一个字符串中,以便在末尾返回。@imstupidpleasehelp刚刚看到您的另一条注释。这取决于你想要什么结果。如果你仔细想想,你打算如何处理你返回的数据?您希望如何读取2条返回语句?您计划如何恢复数据?您计划如何使用它?你的答案就在这个问题上。你不需要在
    if
    语句中使用
    i++
    ,你已经在
    for
    标题中这样做了。如果这样做,将跳过数组中的每一个其他元素。