初学javascript,如何编写反向迭代
New to javascript, how to write reverse iteration?
我目前正在大学里学习CIS入门课程,其中一个项目是javascript。它被分成两个不相关的部分,我可以做第二部分,但我被第一部分困住了。我的教授想让我写一个迭代,它将以相反的顺序显示我在提示屏幕上写的任何名字。所以如果我写"John Smith",它会显示"htims 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>
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"
不需要将这个字符串拆分为数组。只需使用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)
不是先将字符串转换为数组,而是直接从字符串中读取字符。
只需迭代一半的字符数即可实现此目的。
代码演示: http://jsfiddle.net/vgG2P/
:
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
的最后一个字符开始递减。然后简单地交换字符。
当递增计数器小于递减计数器时,迭代继续。因为它们会在中间相遇,你最终只会增加总长度的一半。
也可以在不使用Array的情况下构建结果的一半:
演示: http://jsfiddle.net/vgG2P/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"
我想如果你的教授还没有向你介绍数组和循环的概念,他就不会问你如何反转字符串。基本上,像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()
时发生的事情。
(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()"。
- 如何在javascript中迭代数字列表
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 如何迭代Array.prototype函数
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 在ejs-partial中对JSON对象进行迭代
- 如何在DataTables 2.1中迭代对象数组
- 使用递归属性迭代保留属性结构
- 正在停止.在jquery中的特定时间间隔内,每次迭代的每次执行
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 主干-从模板中迭代的集合中获取特定的模型
- 创建一个方法,通过一个窗口进行迭代并获取Titanium中的所有控件
- 什么's是在javascript中迭代项的最佳方式
- 为什么这只是迭代 HTMLCollection 的奇怪元素
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- 如何在 JavaScript 中动态地编写可迭代的函数数组
- 使用 ImageJ 在大型集群上编写具有多个时间点的并行迭代反卷积脚本
- 如何在jQuery中编写这个JavaScript迭代函数?
- 初学javascript,如何编写反向迭代
- 编写一个递归函数,迭代嵌套循环的深度未知