javascript返回一个数字的所有组合

javascript返回一个数字的所有组合,javascript,Javascript,我试图得到一个数字的所有组合。例如,输入“123”应返回[“123”、“231”、“213”、“312”、“321”、“132”] 以下是我的功能: function swapDigits(input) { for (var i = 0; i++; i < input.length - 1) { var output = []; var inter = input.slice(i, i + 1); var left = (input.

我试图得到一个数字的所有组合。例如,输入“123”应返回
[“123”、“231”、“213”、“312”、“321”、“132”]

以下是我的功能:

function swapDigits(input) {
    for (var i = 0; i++; i < input.length - 1) {
        var output = [];
        var inter = input.slice(i, i + 1);
        var left = (input.slice(0, i) + input.slice(i + 1, input)).split("");
        for (var j = 0; j++; j <= left.length) {
            var result = left.splice(j, 0, inter).join("");
            output.push(result);

        }
    }
    console.log(output);
    return output;
}
函数交换码(输入){
对于(变量i=0;i++;i对于(var j=0;j++;j,该代码中有几个错误

  • 您的
    for
    语句部分的顺序不正确。顺序是初始化、测试、增量。因此
    for(/*init*/;/*test*/;/*increment*/)

  • 您正在为外部循环的每个迭代创建一个新数组


  • 我之所以将此设置为CW,是因为我没有检查除上述错误以外的其他错误。

    已经提到了
    for
    循环和
    scope
    的错误。此外,
    splice
    方法将更改其操作的字符串。这意味着内部循环将永远不会终止,因为
    离开了e> 持续增长,因此
    j
    永远不会到达
    左侧。长度

    如果你对一种语言不熟悉,我建议你从一个接近你想要实现的算法的实现开始。然后,一旦你对它感到满意,就使用更高级的语言结构

    有关示例,请参见。这是算法代码:

    function getPermutations(input)
    {    
        if(input.length <= 1)
        {
            return [input];
        }
        var character = input[0];
        var returnArray = [];
        var subPermutes = getPermutations(input.slice(1));
        debugOutput('Returned array: ' + subPermutes);
        for(var subPermuteIndex = 0; subPermuteIndex < subPermutes.length; subPermuteIndex++ )
        {
           var subPermute = subPermutes[subPermuteIndex];
           for(var charIndex = 0; charIndex <= subPermute.length; charIndex++)
           {                         
               var pre = subPermute.slice( 0, charIndex );
               var post = subPermute.slice( charIndex );             
               returnArray.push(pre+character+post);           
               debugOutput(pre + '_' + character + '_' + post );
           }
        }
        return returnArray;
    }
    

    此算法不强制唯一性。因此,如果您有一个字符串
    22
    ,那么您将得到两个结果-
    22,22
    。此外,此算法使用递归,我认为在这种情况下非常直观,但有纯迭代实现。

    在寻求帮助时,请以可读的方式格式化代码。这是基本的礼貌。(在本例中,它还使至少一个错误变得更加明显。)我这次为您做了。@crowder,仔细看看:)对于初学者来说,输出没有在正确的位置声明。请将其移到for循环之外。它是3!=3 x 2 x 1=6-如果您参考他的代码或他的示例:)在他的例子中,他有所有可能的。在他的代码中,当然不是:)@alexmac:啊,OP不允许同一个数字出现两次。
    Returned array: 4
    _3_4
    4_3_
    Returned array: 34,43
    _2_34
    3_2_4
    34_2_
    _2_43
    4_2_3
    43_2_
    Returned array: 234,324,342,243,423,432
    _1_234
    2_1_34
    23_1_4
    234_1_
    _1_324
    3_1_24
    32_1_4
    324_1_
    _1_342
    3_1_42
    34_1_2
    342_1_
    _1_243
    2_1_43
    24_1_3
    243_1_
    _1_423
    4_1_23
    42_1_3
    423_1_
    _1_432
    4_1_32
    43_1_2
    432_1_