在第二次迭代时,JavaScript循环能否从上一次迭代的结果迭代



我刚刚加入Stack Overflow,这是我的第一篇帖子,所以如果我做错了什么,请随时告诉我。

我遇到了一个挑战,那就是创建一个接受字符串并调用另一个给定函数的函数,该函数交换索引,直到字符串向后返回。

我已经做到了以下几点:

//given function
function swap(str, first, last){
str = str.split('');
let firstIndex = str[first];    
str[first] = str[last];
str[last] = firstIndex;
str = str.join("").toString()
return str;
}
//my function
let word = "Hello"
function reverseSwap(str) {
let result = ""
for (let i = 0; i < str.length/2; i++) {
result += swap(str, i, str.length -1 - i);
}
return result;
}
console.log(reverseSwap(word))

然而,这返回";oellHHlleoHello";,因为每次迭代都交换原始字符串的索引,然后进行连接。在第二次迭代时,是否可以让循环从上一次迭代的结果迭代,从而发生以下情况?:

第一次迭代的结果:交换(字,0,4(,返回"0";oellH">
第二次迭代使用"oellH";而不是";你好"交换(1;olleH">
然后,交换(2,2(,不会改变任何内容。

它不工作,因为

  • 不要+=将所有新字符串添加到结果中。(这将把每个交换字符串附加到结果中。(
  • 你必须始终操纵";结果";字符串。(您希望始终在更新版本的字符串上进行交换。而不是原始版本(

这里有一个简单的解决方案:

function swap(str, first, last) {
str = str.split("");
let firstIndex = str[first];
str[first] = str[last];
str[last] = firstIndex;
str = str.join("").toString();
return str;
}
let word = "Hello";
function reverseSwap(str) {
for (let i = 0; i < str.length / 2; i++) {
str = swap(str, i, str.length - 1 - i);
}
return str;
}
console.log(reverseSwap(word));

最新更新