我目前正在我的大学学习CIS课程,其中一个项目是javascript。它被分成两个不相关的部分,我能够做第二部分,但我被困在第一部分。我的教授希望我写一个迭代,它会以相反的顺序显示我在提示屏幕中写的任何名字。因此,如果我写“约翰史密斯”,它将显示“受害者nhoj”。问题是我不知道如何写它。
<html>
<body>
<script>
var namIn = window.prompt("Enter name:" );
var namAr = namIn.split("");
var namArLen = namAr.length;
document.write(namAr + "<br /> Length: " + namArLen);
</script>
</body>
</html>
答案 0 :(得分:8)
JavaScript中的字符串有一个名为split()
的函数,它将它们转换为数组。 JavaScript中的数组有一个名为reverse()
的函数可以反转它们的顺序,还有一个名为join()
的函数可以将它们转换回字符串。您可以将这些组合成:
"John Smith".split("").reverse().join("")
返回:
"htimS nhoJ"
此外,我不知道这是否是一个拼写错误,但你可以抛出一个toLowerCase()
来获得你问题的100%:
"John Smith".split("").reverse().join("").toLowerCase()
返回:
"htims nhoj"
至于标题中的问题,您可以在最后一个参数中指定for循环的方向,如下所示:
var reversed = [];
var name = "John Smith".split("");
for(var i = name.length-1; i >= 0; i--) {
reversed.push(name[i]);
}
console.log(reversed.join(""));
将输出:
"htimS nhoJ"
答案 1 :(得分:1)
无需将此字符串拆分为数组。只需使用charAt()
函数和一个简单的for循环。
var name = window.prompt("Enter name:");
var reverse = "";
for (var i = name.length - 1; i >=0; i--) {
reverse += name.charAt(i);
}
console.log(reverse)
不是先将字符串转换为数组,而是直接从字符串中读取字符。
答案 2 :(得分:1)
你可以通过迭代只有一半的字符来实现这一点。
的 CODE 强> :
var name = "Bob Dylan".split("");
// The counters will meet in the middle.
// --------------+----------------------
// first char last char | inc dec
// -------v-------------v-----------v----v----v
for(var i = 0, j = name.length-1; i < j; i++, j--) {
var temp = name[i]; // Store the `i` char
name[i] = name[j]; // Replace the `i` char with the `j` char
name[j] = temp; // Replace the `j` char with the `i` char we stored
}
console.log(name.join("")); "nalyD boB"
的说明强> 的
我们所做的是将字符拆分为一个数组,并维护两个计数器,一个从0
的第一个字符开始递增,另一个从.length - 1
的最后一个字符递减。然后只需交换字符。
当递增计数器小于递减计数器时,迭代继续。因为它们会在中间相遇,所以最终只会增加总长度的一半。
我们也可以在不使用数组的情况下构建结果的一半:
var name = "Bob Dylan";
var start = "", end = ""
for(var i = 0, j = name.length-1; i < j; i++, j--) {
end = name.charAt(i) + end
start += name.charAt(j)
}
if (i === j)
start += name.charAt(i)
console.log(start + end); "nalyD boB"
答案 3 :(得分:0)
如果他还没有向您介绍数组和循环的概念,我假设您的教授不会问您如何反转字符串。基本上,像John Smith
这样的字符串只是一个像这样的字符数组:
0123456789
John Smith
再一次,从某种意义上说,字符串只是一个字符数组,你有10个字符需要反转。那么你怎么做呢?好吧,你基本上需要从你给出的“数组”中取出最后一个字符h
,并使它成为你要创建的新“数组”中的第一个字符。这是一个例子:
var known = 'John Smith';
var reversed = ''; // I'm making an empty string aka character array
var last = known.length - 1 // This is the index of the last character
for (var i = 0; i < known.length; i++)
{
temp += known[last - i];
}
那发生了什么事?
known
从0开始到9结尾(从第一个字符到最后一个字符)i
从0 - 9 last
的值始终为9 last - i
会以相反的顺序给我们索引(9,8,7,...,0)i
为0时,last - i
为9,known[9]
为“h”;重复这个过程,你得到反向字符串希望这有助于更好地解释当您在阵列上调用reverse()
时发生的情况。
答案 4 :(得分:0)
(1)没有内置函数的更直接的方法:
function reverse(str) {
let reversed_string = "";
for (let i = str.length - 1; i >= 0; i--) {
reversed_string += str[i];
}
return reversed_string;
}
(2)使用ES2015的“ for”辅助功能:
function reverse(str) {
let reversed_string = "";
for (let character of str) {
reversed_string = character + reversed_string;
}
return reversed_string;
}
(3)使用ES6语法和ES5.1 reduce():
function reverse(str) {
return str.split('').reduce((reversed, char) => char + reversed, '');
}
// reduce takes in 2 arguments. (1) arrow function, and (2) empty string.
对于采访而言,您可能无法使用内置功能,尤其是对于“ reverse()”而言。