【问题标题】:Can a JavaScript loop, upon the second iteration, iterate from the result of the prior iteration?JavaScript 循环能否在第二次迭代时从前一次迭代的结果中进行迭代?
【发布时间】:2021-12-05 21:49:23
【问题描述】:

我刚刚加入 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”,因为每次迭代都会交换原始字符串中的索引,然后进行连接。是否有可能在第二次迭代时让循环从前一次迭代的结果中进行迭代,从而发生以下情况?:

第一次迭代的结果:swap(word, 0, 4) 返回 "oellH"
第二次迭代使用“oellH”而不是“Hello”来交换(1, 3),它返回“olleH”
然后,swap(2,2) 不会改变任何东西。

【问题讨论】:

  • let result = "" -> let result = strresult += swap(str, i, str.length -1 - i); -> result = swap(result, i, str.length -1 - i);

标签: javascript loops


【解决方案1】:

它不起作用,因为

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

这是一个简单的解决方案:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-02
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多