pop()方法javascript没有给出完整的输出

时间:2016-01-14 01:23:13

标签: javascript

我有点觉得和白痴问这个但是学习javascript并且正在对coderbyte进行简单的挑战并且想要反转一个字符串以便这个worte

var randomString = "THIS IS THE STRING I AM TRYING TO REVERSE";    

  var newFunc = function() {
    var randomArray = randomString.split(" ");
    var newArray = [];

    for (var i = 0; i <= randomArray.length; i++) {

      newArray[i] = randomArray.pop();
      var diffString = newArray.join(" ");
    }
    console.log(diffString);
  };

  newFunc();`

但我得到的输出只是

“反过来试试我”。

为什么不打印其余字符串?我现在正在尝试用不同的方法来反转它,但这是最直接的,只是混淆了为什么它不起作用。提前谢谢。

3 个答案:

答案 0 :(得分:1)

当你从randomArray中弹出值时,它会改变数组的长度。由于你的for循环在每次迭代时检查它,它会过早地突破循环,因为长度变短了。

修复是在开始弹出之前保存长度,并在for循环中使用它。

(这假设您试图颠倒字符串中单词的顺序。)

var randomString = "THIS IS THE STRING I AM TRYING TO REVERSE";    

var newFunc = function() {
  var randomArray = randomString.split(" ");
  var newArray = [];
  var length = randomArray.length;
  for (var i = 0; i <= length; i++) {
    newArray[i] = randomArray.pop();
  }
  var diffString = newArray.join(" ");
  console.log(diffString);
};

newFunc();

答案 1 :(得分:1)

正如其他人所说,检查阵列的长度变化是个问题;预先缓存一次,因此您弹出正确的次数,只需将for循环更改为(也从<=修正为正确<):

for (var i = 0, len = randomArray.length; i < len; i++) {

当然,这里愚蠢的部分是你手动实施逆转。已经有Array.reverse

var newFunc = function() {
    console.log(randomString.split(" ").reverse().join(" "));
};

完成。一线即便。并且它不像函数是非标准的,IE从5.5开始支持它,并且自1.0版本以来一直支持其他浏览器。

答案 2 :(得分:0)

如前所述,您在循环期间更改长度。也许Array.sort在这里更容易使用?或者......正如ShadowRanger所提到的那样Array.reverse()。

var randomString = "test sds2 iujn3 iujn4 jijb5 reverse";

function reverse(x) {
  return x  // This is a <string>
    .split(" ")  // Transform <string> into <Array>
    .reverse()  // Reverse array order
    .join(" ");  // Transform <Array> back into <string>
}
console.log(reverse(randomString));