Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Array.pop()未在反转函数中返回所有字母_Javascript - Fatal编程技术网

Javascript Array.pop()未在反转函数中返回所有字母

Javascript Array.pop()未在反转函数中返回所有字母,javascript,Javascript,我目前正在练习代码战,在使用.pop方法时遇到了一个奇怪的问题。在尝试反转给定字符串中每个单词中的字母的同时,在保持每个单词的位置和每个空格的同时,我尝试使用嵌套的for循环分别访问每个单词中的每个字母,并在将单词拆分为单独的数组后弹出每个单词的最后一个字母。这是我的密码: function reverseWords(str) { let val = '' let newStr = str.split(/(\s+)/) for(let i = 0; i < newStr.len

我目前正在练习代码战,在使用.pop方法时遇到了一个奇怪的问题。在尝试反转给定字符串中每个单词中的字母的同时,在保持每个单词的位置和每个空格的同时,我尝试使用嵌套的for循环分别访问每个单词中的每个字母,并在将单词拆分为单独的数组后弹出每个单词的最后一个字母。这是我的密码:

function reverseWords(str) {
  let val = ''
  let newStr = str.split(/(\s+)/)
  for(let i = 0; i < newStr.length; i++){
    let pieces = newStr[i].split('');
    for(let j = 0; j < pieces.length; j++){
      val += pieces.pop()
    }
  }
  return val
}

但这只返回每个单词的最后一个字母*单词的长度。

您正在通过对数组进行变异。在迭代时弹出它。例如,如果数组最初包含4个元素,则在以下代码中:

for(let j = 0; j < pieces.length; j++){
  val += pieces.pop()
}

您正在通过对数组进行变异。在对其进行迭代时将其弹出。例如,如果数组最初包含4个元素,则在以下代码中:

for(let j = 0; j < pieces.length; j++){
  val += pieces.pop()
}

pop正在对调用它的数组进行变异。作为实验,您可以使用以下版本替换第一个示例中的内部循环:forlet j=pieces.length-1;j>-1;j-{…}pop正在对调用它的数组进行变异。作为实验,您可以使用以下版本替换第一个示例中的内部循环:forlet j=pieces.length-1;j>-1;j-{…}谢谢你的回答和替代解决方案。我仍在理解所有正则表达式语法的过程中,所以对我来说还是有点陌生。现在我将继续使用循环。我有一个问题,为什么while循环不改变整个字符串,即使pop的使用方式与For循环相同?请记住,您已经在使用带有/\s+/的正则表达式,在.split中,比.matching更复杂\w+imo当您在newStr上进行迭代时,您没有弹出或移出newStr,因此问题不会出现-newStr数组保持静态。虽然newStr对于一个不是字符串的变量来说是一个奇怪的名字,但可以改称它为origWordsArr?因此基本上对于for循环来说,当j变量增加到大于片段长度时,片段长度以相同的速度减少,因为。如果愿意,pop会对每个“片段”进行变异。while循环没有向上迭代递减长度的计数器,因此它能够访问它正在迭代的“片段”的完整值。非常感谢您的帮助,这很有意义,是正确使用循环的一个很好的经验教训。感谢您的回答和替代解决方案。我仍在理解所有正则表达式语法的过程中,所以对我来说还是有点陌生。现在我将继续使用循环。我有一个问题,为什么while循环不改变整个字符串,即使pop的使用方式与For循环相同?请记住,您已经在使用带有/\s+/的正则表达式,在.split中,比.matching更复杂\w+imo当您在newStr上进行迭代时,您没有弹出或移出newStr,因此问题不会出现-newStr数组保持静态。虽然newStr对于一个不是字符串的变量来说是一个奇怪的名字,但可以改称它为origWordsArr?因此基本上对于for循环来说,当j变量增加到大于片段长度时,片段长度以相同的速度减少,因为。如果愿意,pop会对每个“片段”进行变异。while循环没有向上迭代递减长度的计数器,因此它能够访问它正在迭代的“片段”的完整值。非常感谢您的帮助,这很有意义,并且是正确使用循环的一个很好的教训。