您可以想象长度代表插槽数。假定N是初始列表中的元素数,则每个插槽都有N种可能性。因此,给定三个值
[1,2,3],您将有一个总的
3 x 3 x 3 =27排列。
这是我的尝试。包含评论!
var list = [1,2,3];var getPermutations = function(list, maxLen) { // Copy initial values as arrays var perm = list.map(function(val) { return [val]; }); // Our permutation generator var generate = function(perm, maxLen, currLen) { // Reached desired length if (currLen === maxLen) { return perm; } // For each existing permutation for (var i = 0, len = perm.length; i < len; i++) { var currPerm = perm.shift(); // Create new permutation for (var k = 0; k < list.length; k++) { perm.push(currPerm.concat(list[k])); } } // Recurse return generate(perm, maxLen, currLen + 1); }; // Start with size 1 because of initial values return generate(perm, maxLen, 1);};var res = getPermutations(list, 3);console.log(res);console.log(res.length); // 27[fiddle](http://jsfiddle.net/kD8G3/)



