JavaScript数组问题解决问题

时间:2019-10-02 09:18:51

标签: javascript arrays

能帮我解决以下问题吗?

如果counter为2,则该函数应返回inputfromparent

如果counter为3,则该函数应返回[ [1,2], [1,3] , [1,4], [1,5], [2,3], [2,4], [2,5], [3,4], [3,5], [4,5] ]

如果counter为4,则该函数应返回[ [1,2,3], [1,2,4] , [1,2,5], [1,3,4], [1,3,5], [1,4,5], [2,3,4], [2,3,5], [2,4,5], [3,4,5] ]

[ [1,2,3,4], [1,2,3,5] , [1,2,4,5], [1,3,4,5], [2,3,4,5] ]

1 个答案:

答案 0 :(得分:0)

您可以采用递归方法,并移交其余数组和减少的计数器。

function getPairs(array, counter) {
    var result = [];
    if (!counter) return [[]];
    array.forEach((v, i, a) => 
        getPairs(a.slice(i + 1), counter - 1)
            .forEach(a => result.push([v, ...a]))
    );
    return result;
}

const array = [1, 2, 3, 4, 5];

console.log(getPairs(array, 1).map(a => a.join(' ')));
console.log(getPairs(array, 2).map(a => a.join(' ')));
console.log(getPairs(array, 3).map(a => a.join(' ')));
console.log(getPairs(array, 4).map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }

Array#flatMap版本

function getPairs(array, counter) {
    if (!counter) return [[]];
    return array.flatMap((v, i, a) => 
        getPairs(a.slice(i + 1), counter - 1).map(a => [v, ...a])
    );
}

const array = [1, 2, 3, 4, 5];

console.log(getPairs(array, 1).map(a => a.join(' ')));
console.log(getPairs(array, 2).map(a => a.join(' ')));
console.log(getPairs(array, 3).map(a => a.join(' ')));
console.log(getPairs(array, 4).map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }