2013-12-12 45 views
0

所以我试图写一个程序来查找所有可能的单词中的字母排列(顺序)作为我的代数老师的笑话。这是我从在课间写,但是当我运行它(在的NodeJS,但它是相当香草JS这样的平台不应该的问题)我得到这是为什么返回undefined?

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中的唯一原因是我需要实践节点,因为我要在它即将开始一个相当大的项目)

谢谢!

+0

'字母'对象为空或未定义。确保它是有效的 – HICURIN

+3

请注意,您的for循环没有用,因为您在第一次迭代时返回。它相当于'var i = 0; return add_letter(...)' – slebetman

+0

'wtf是我的名字首字母缩写'是我是对的,还是我是对的?这就是'letters'字符串所说的 – Markasoftware

回答

0

在generata_permutations上,您正在对generate_permutation(letters.slice(1,letters.length))进行递归调用,并返回undefined。由于这是add_letter(字母)的第二个参数,当您尝试迭代字母时会出错。

看看这个link你会发现一个不错的排列实现。希望能帮助到你。

+0

我刚刚尝试过实现置换,但它多次使用相同的字母作为输出。你最好的解决方法是什么? –