这是我的代码:
function permAlone(string) {
if (string.length < 2) return string; // This is our break condition
var permutations = []; // This array will hold our permutations
for (var i = 0; i < string.length; i++) {
var character = string[i];
// Cause we don't want any duplicates:
if (string.indexOf(character) != i) // if char was used already
continue; // skip it this time
var remainingString = string.slice(0, i) + string.slice(i + 1, string.length); //Note: you can concat Strings via '+' in JS
for (var subPermutation of permAlone(remainingString))
permutations.push(character + subPermutation);
}
var permutationsFinal = [];
for (var j = 0; j < (permutations.length); j++) {
if (!(permutations[j].match(/([a-zA-Z])\1/))) {
permutationsFinal.push(permutations[j]);
}
}
return (permutationsFinal.length);
// ^^^^^^^^ if I add this, the error is thrown
}
permAlone('abc');
如果我更换:
return (permutationsFinal);
由:
return (permutationsFinal.length);
我在控制台中收到此错误:
TypeError:
permAlone
不是函数
为什么吗
感谢您的帮助! :)
答案 0 :(得分:3)
要从评论中删除答案:
for (var subPermutation of permAlone(remainingString))
遍历函数的返回值(递归调用)。这是错误的行号。数字不可迭代,因此当您返回数字而不是数组时,它会抛出错误。
不确定您使用的浏览器,但FireFox会将错误报告为
TypeError:permAlone(...)不可迭代
或多或少是自我解释的。如果您的浏览器中报告的错误消息是针对发布的代码,则可以说它不仅具有误导性,而且实际上不正确。
答案 1 :(得分:3)
这是一个递归函数,如果你返回的函数不是函数本身的预期,那么你将破坏递归循环。