为什么这个返回未定义?

时间:2013-12-12 02:43:03

标签: javascript node.js recursion undefined

所以我正在尝试编写一个程序来查找单词中所有可能的字母排列(顺序)作为我的代数老师的笑话。这是我在类之间编写的,但是当我运行它时(在NodeJS中,但它非常香草JS所以平台应该无关紧要)我得到了

TypeError: Cannot call method 'forEach' of undefined

letters.forEach(function (str) {

代码:

var name = ['w', 't', 'f', 'a', 'r', 'e', 'm', 'y', 'i', 'n', 'i', 't', 'i', 'a', 'l', 's'];
var permutations = [];

function add_letter(letter, letters) {
    var full = [];
    letters.forEach(function (str) {
        full.push(letter + str);
    });
    return full;
}

function generate_permutation(letters) {
    for (i=0; i<letters.length; i++) {
        return add_letter(letters[i], generate_permutation(letters.slice(1, letters.length)));
    }
}

permutations = generate_permutation(name);

console.log(permutations);

(我在JS中决定使用它的唯一原因是我需要在Node中练习,因为我将很快开始一个相当大的项目)

谢谢!

1 个答案:

答案 0 :(得分:0)

在generata_permutations上,你正在对generate_permutation(letters.slice(1,letters.length))进行递归调用,这将返回undefined。因为当你尝试迭代字母时,这是add_letter(字母)的第二个参数,你会得到错误。

查看此link,您可以在其中找到一个很好的排列实现。希望它有所帮助。