Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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中所有可能的组合-为什么是pop()?_Javascript_Algorithm_Recursion - Fatal编程技术网

javascript中所有可能的组合-为什么是pop()?

javascript中所有可能的组合-为什么是pop()?,javascript,algorithm,recursion,Javascript,Algorithm,Recursion,我试图理解我在网上遇到的这个函数,它返回字符串的所有可能组合——为什么nextleter.pop需要pop()调用?我试着在控制台中调试这个,但不清楚pop到底做了什么 结果为nextLetter.pop()-->['bac','bca','cba','cab','acb','abc'] 没有nextLetter.pop()的结果-->['bac', “巴卡”, “巴卡巴”, “巴卡巴布”, "baccacbacbab",, “Baccacababacbbc”] function stringP

我试图理解我在网上遇到的这个函数,它返回字符串的所有可能组合——为什么nextleter.pop需要pop()调用?我试着在控制台中调试这个,但不清楚pop到底做了什么

结果为nextLetter.pop()-->['bac','bca','cba','cab','acb','abc']

没有nextLetter.pop()的结果-->['bac', “巴卡”, “巴卡巴”, “巴卡巴布”, "baccacbacbab",, “Baccacababacbbc”]

function stringPermutations(str) {
  var permutations = [];
  var nextLetter = [];
  var chars = str.split('');

  permutateInner(chars);



  function permutateInner(chars) {
    if (chars.length === 0) {

      permutations.push(nextLetter.join(''));
    }
    for (var i = 0; i < chars.length; i++) {


      chars.push(chars.shift());

      nextLetter.push(chars[0]);

      permutateInner(chars.slice(1));
      //what is this doing?

      nextLetter.pop();

    }
  }
  return permutations;
}

console.log(stringPermutations('abc'));
函数字符串置换(str){
var置换=[];
var nextLetter=[];
var chars=str.split(“”);
permutateInner(chars);
函数置换器(字符){
如果(字符长度===0){
置换推(nextleter.join(“”));
}
对于(变量i=0;i
从顶部开始,很明显,
nextLetter
是一个
数组
——因此我首先要看的是

正如文档所述,
.pop()
方法从
数组中删除最后一个元素并返回它——在示例代码中,没有使用返回值,因此很明显,删除最后一个元素的副作用是有用的
对数组子集进行递归
[1..n]
。它还包括对当前阵列的每个子阵列进行排列

e、 g.当当前第一个字母为
b
时,递归包括置换
ac
ca
。当当前第一个字母是
a
时,递归包括排列
cb
bc


关键是要将它放在那里,否则只能得到结果['abc'、'bca'、'cba']

javascripts数组
pop
方法仅从数组中删除最后一个元素,并返回该元素。我了解pop本身的功能,但不了解它在for循环内递归上下文中的功能