我有点觉得和白痴问这个但是学习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();`
但我得到的输出只是
“反过来试试我”。
为什么不打印其余字符串?我现在正在尝试用不同的方法来反转它,但这是最直接的,只是混淆了为什么它不起作用。提前谢谢。
答案 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));