何时将组合附加/推送到阵列?

时间:2017-12-01 01:54:53

标签: javascript arrays function combinations

我目前正在使用此代码从数组中以10个为一组创建数组的每个组合数组:

var Util = function() {
};

Util.getCombinations = function(array, size, start, initialStuff, output) {
    if (initialStuff.length >= size) {
        output.push(initialStuff);
    } else {
        var i;
        for (i = start; i < array.length; ++i) {
            Util.getCombinations(array, size, i + 1, initialStuff.concat(array[i]), output);
        }
    }
}

Util.getAllPossibleCombinations = function(array, size, output) {
    Util.getCombinations(array, size, 0, [], output);
}

例如,我的数字数组可能是[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],它会给我这些可能的组合:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11]
[1, 2, 3, 4, 5, 6, 7, 8, 10, 11]
[1, 2, 3, 4, 5, 6, 7, 9, 10, 11]
[1, 2, 3, 4, 5, 6, 8, 9, 10, 11]
[1, 2, 3, 4, 5, 7, 8, 9, 10, 11]
[1, 2, 3, 4, 6, 7, 8, 9, 10, 11]
[1, 2, 3, 5, 6, 7, 8, 9, 10, 11]
[1, 2, 4, 5, 6, 7, 8, 9, 10, 11]
[1, 3, 4, 5, 6, 7, 8, 9, 10, 11]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

我想要做的只是在我的数组中添加/推送/添加组合(如果它们具有特定总数)。我对javascript有些新意,我想知道是否有人能告诉我组合中的哪个位置确定并添加到我的数组(输出)。

谢谢!

1 个答案:

答案 0 :(得分:1)

这些组合将结果添加到结果中:

if (initialStuff.length >= size) {
    output.push(initialStuff);
}

如果您想添加其他条件,可以将其放在那里:

if (initialStuff.length >= size) {
    if (someOtherTest(initialStuff)) {
        output.push(initialStuff);
    }
}

请注意,希望将两个测试合并到

if (initialStuff.length >= size && someOtherTest(initialStuff)) {
    output.push(initialStuff);
}

这是因为循环和递归的else子句只应在长度测试失败时执行,它不应该依赖于其他标准。