Search code examples
javascriptarraysprobability

Can you return n choose k combinations in Javascript using Array.flatMap?


For instance, this is 5 choose 2:

    var array = [0,1,2,3,4];
    
    var result = array.flatMap(
        (v, i) => array.slice(i+1).map(w => [v, w]) 
    );
    
    console.log(result);

How would I be able to do 5 choose 3 using this method?


Solution

  • Just add another level of nesting:

    var array = [0,1,2,3,4];
    
    var result = array.flatMap((v, i) =>
        array.slice(i+1).flatMap((w, j) =>
            array.slice(i+1+j+1).map(u =>
                [v, w, u]
            )
        )
    );
    
    console.log(result);
    

    At this point, it might be easier to do with recursion though:

    function choose(arr, k, prefix=[]) {
        if (k == 0) return [prefix];
        return arr.flatMap((v, i) =>
            choose(arr.slice(i+1), k-1, [...prefix, v])
        );
    }
    
    console.log(choose([0,1,2,3,4], 3));