使用javascript输出数字数组的每个组合

Dav*_*rth 6 javascript combinations

我在数组中有几个数字

var numArr = [1, 3, 5, 9];
Run Code Online (Sandbox Code Playgroud)

我想循环遍历该数组并将每个唯一的3个数字组合相乘,如下所示:

1 * 3 * 5 = 
1 * 3 * 9 = 
1 * 5 * 9 = 
3 * 5 * 9 =
Run Code Online (Sandbox Code Playgroud)

然后返回所有计算的数组

var ansArr = [15,27,45,135];
Run Code Online (Sandbox Code Playgroud)

有人有优雅的解决方案?提前致谢.

Mar*_*tos 12

用于生成组合的通用算法如下:

function combinations(numArr, choose, callback) {
    var n = numArr.length;
    var c = [];
    var inner = function(start, choose_) {
        if (choose_ == 0) {
            callback(c);
        } else {
            for (var i = start; i <= n - choose_; ++i) {
                c.push(numArr[i]);
                inner(i + 1, choose_ - 1);
                c.pop();
            }
        }
    }
    inner(0, choose);
}
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可以这样称呼它:

function product(arr) {
    p = 1;
    for (var i in arr) {
        p *= arr[i];
    }
    return p;
}

var ansArr = [];

combinations(
    [1, 3, 5, 7, 9, 11], 3,
    function output(arr) {
        ansArr.push(product(arr));
    });

document.write(ansArr);
Run Code Online (Sandbox Code Playgroud)

...对于给定的输入,产生这个:

15,21,27,33,35,45,55,63,77,99,105,135,165,189,231,297,315,385,495,693
Run Code Online (Sandbox Code Playgroud)