我正在尝试理解我在网上遇到的这个函数,该函数返回字符串的所有可能组合 - 为什么nextLetter.pop需要pop()调用?我尝试在控制台中对此进行调试,但目前尚不清楚pop的确切内容。
结果与nextLetter.pop()---> ['bac','bca','cba','cab','acb','abc']
没有nextLetter.pop()的结果 - > ['bac', '浆果', 'baccacba', 'baccacbaab', 'baccacbaabacb', 'baccacbaabacbbc']
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'));
答案 0 :(得分:0)
从顶部开始,很清楚nextLetter
是Array
- 所以我看到的第一个地方就是docs on MDN。
正如文档所述,.pop()
方法从Array
中移除了最后一个元素并将其返回 - 在示例代码中,返回值未被使用,所以很明显&# 39;有用的是删除最后一个元素的副作用。
答案 1 :(得分:0)
permutateInner(chars.slice(1));
对数组子集[1..n]
进行递归。它包含在当前数组的每个子数组中也有排列。
e.g。当前第一个字母为b
时,递归包括排列ac
和ca
。当前第一个字母为a
时,递归包括排列cb
和bc
。
将它放在那里是至关重要的,否则你只会获得结果[&#39; abc&#39;,&#39; bca&#39;&#39; cba&#39; ]