Мне нужно получить все возможные 10 комбинаций из этого массива в другой массив. Все, что я получаю из своего кода, это возможные 3 комбинации - PullRequest
0 голосов
/ 13 января 2020

Мне нужно получить все возможные 10 комбинаций из этого массива в другой массив. Все, что я получаю из своего кода, это возможные 3 комбинации

    let X = ['Me', 'You', 'Her', 'Him', 'Them', 'She', 'juice', 'mango', 'orange', 'pillow', 'clock', 'tyre', 'car', 'calendar', 'fan', 'cloth', 'television', 'laptops', 'Honda', 'remote', 'echo'];

    function combinations(arr) {

        let sets = [];
        let length = arr.length;
        let firstHalf = arr.slice(0, length/2);
        let secondHalf = arr.slice(-length/2);

        sets.push(firstHalf, secondHalf);
        push(firstHalf, secondHalf, sets);
        push(firstHalf, secondHalf, sets);

        return [sets, `The number of possible combinations: ${sets.length}`];
    }

    function push(A, B, arr){

        let i=0, j=0, k=1;
        while(i+k < A.length){
            for(let j=0; j<B.length; j++){
                arr.push([A[i], A[i+k], B[j]]);
            }
            k++;
            if(k === 3){
                i++;
                k=1;
            }
        }
    }

    console.log(combinations(X));

1 Ответ

0 голосов
/ 13 января 2020

Я не правильно понял ваш вопрос, но вот как вы можете найти все возможные комбинации данного массива.

Общее количество комбинаций составляет 2 ^ (длина массива). При условии отсутствия дубликатов.

Для вашего массива это будет 2 ^ 21 = 2097152.

const combinations = xs => 
    xs.reduce((acc, x) => [...acc, ...acc.map(a => a.concat(x))], [[]])

const t = combinations([1,2,3]);
console.log(t.length, t);
...