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

pop() method javascript not giving full output

本文关键字:输出 方法 javascript pop      更新时间:2023-09-26

我有点像个白痴,问这个问题,但学习javascript,在coderbyte上做一些简单的挑战,想反转一个字符串,所以使用这个

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();`

但我得到的只是

"与我尝试相反"。

为什么不打印字符串的其余部分?我现在正在用一种不同的方法来逆转它,但这是最直接的,只是弄不明白为什么它不起作用。提前谢谢。

当您从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();

正如其他人所指出的,检查数组的长度变化是一个问题;在前面缓存一次,这样你就可以弹出正确的次数,只需将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版本开始支持其他浏览器。

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

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));