如何生成特定长度限制下所有可能组合的字母?

3
如何在JavaScript中生成具有特定长度限制的所有可能组合的字母?
// return [aaaa, bbbb]

function allPossibleCombinations(inputArray, outputEachStrLength) {
  var inputArrayLength = inputArray.length;
  for (i = 0; i < inputArrayLength; i++) {

  }
}

var inputArray = [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z];
var outputEachStrLength = 4;
allPossibleCombinations(inputArray, outputEachStrLength)

http://jsfiddle.net/0jqkpLmv/

1个回答

18

您可以使用递归方法:

function allPossibleCombinations(input, length, curstr) {
    if(curstr.length == length) return [ curstr ];
    var ret = [];
    for(var i = 0; i < input.length; i++) {
        ret.push.apply(ret, allPossibleCombinations(input, length, curstr + input[i]));
    }
    return ret;
}

var input = [ 'a', 'b', 'c', 'd' ];
console.log(allPossibleCombinations(input, 3, ''));

谢谢回复,curstr是什么? - user1575921
3
curstr 是当前正在生成的字母组合。每次调用函数时,它将循环遍历输入并将每个字母附加到其中。如果 curstr 够长,则会被返回。 - David Fang
我懂了!!非常感谢!! - user1575921
2
我想使用这个函数,输入一个包含36个字符的数组,计算所有长度为5个字符的字符串,但是它失败了,显示:Uncaught RangeError: Maximum call stack size exceeded。我猜我给它施加了太大的负担。 :D - Benny Code
@DavidFang 有没有一种快速的方法可以将这个“导出”放在单行上,这样我就可以轻松地复制并粘贴到Excel中了? - jonmrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接