所以我正在研究这个问题而且我的生活中无法弄清楚为什么.length没有提出正确的价值。它只返回0,我假设它意味着它没有等待函数完成。
在尝试返回sortPerms.length之前,我试过让一个计数器和一个if语句等待数组的长度相等。但它在开始时评估为真。
如果我只是返回数组" sortPerms"它返回数组中正确数量的值。
非常感谢任何帮助!
这是代码:
var regex = /(.)\1+/g;
var sortPerms = [];
function permAlone (str) {
var perms = [], combos = [], letterOne = str[0];
if (str.length === 1) {
perms.push(str);
return perms;
}
str = str.substring(1,str.length);
combos = permAlone(str);
for (var i = 0; i < combos.length; i++) {
for (var j = 0; j < combos[i].length + 1; j++) {
perms.push(combineCombos(combos[i], letterOne, j));
}
}
sortPerms = perms.filter(function(string){
return !string.match(regex);
});
return sortPerms.length;
}
function combineCombos(combo, lettersIn, i) {
var begin = combo.substring(0,i);
var end = combo.substring(i,combo.length);
return begin + lettersIn + end;
}
答案 0 :(得分:0)
问题是该函数的返回值有时是数组(return perms;
),在其他情况下是数字(return sortPerms.length
)。然而,当您以递归方式调用函数(combos = permAlone(str)
)时,您显然需要一个数组(combos.length
)。
所以最终的return语句应为:
return sortPerms;
现在接下来的电话:
permAlone("abc");
返回:
["abc","bac","bca","acb","cab","cba"]
......这似乎就是你追求的目标。
如果你需要数组的长度,那么不要在return
语句中对其进行编码,而是在你的调用中进行编码:
console.log(permAlone("abc").length); // 6