【问题标题】:Get all possible pairs out of a list of names从名称列表中获取所有可能的对
【发布时间】:2019-11-11 19:54:12
【问题描述】:

假设我有一个名称数组,例如:

let members = ["John", "Marie", "Ivy", "Daniel"];

每个人都必须向另一个人交付一件独特的物品。以下是 1 个组合集的示例:

[
    {"John":"Marie"},
    {"Marie":"Ivy"},
    {"Ivy":"Daniel"},
    {"Daniel":"John"},
]

收件人只能命名一次。我想检索所有可能组合的数组。获得这样一个数组的最简单方法是什么?

编辑:很多反对意见。恐怕是有道理的。这是我的工作,似乎...冗长:

//gets all permutations combination of the same array    
const perm = members => members.length ? members.reduce((r, v, i) => [ ...r, ...perm([ ...members.slice(0, i), ...members.slice(i + 1) ]).map(x => [ v, ...x ])], []) : [[]]


let permutations = perm(members);

permutations.map(set => {
    let valid = true;
    let combination = [];

    set.map((name, i) => {
        let match = {};
        if (name === members[i]) {
            valid = false;
            return
        }
        match[members[i]] = name;
        combination.push(match);
    })

    if (valid) possibilities.push(combination);
})

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    试试这个

    let rslt = []
    
    let members = ["John", "Marie", "Ivy", "Daniel"];
    
    members.forEach((member, i) => { 
        let nextIndex = i + 1;
    
        // if it's the last member
        // then pass it to the first one
        if (nextIndex === members.length) {
            nextIndex = 0;
        }
        let obj = new Object();
        obj[member] = members[nextIndex];
        rslt.push(obj);
    })
    
    console.log(rslt);
    

    【讨论】:

    • 感谢您的贡献。它可以给我1个组合。我正在寻找所有可能的组合。
    猜你喜欢
    • 2017-11-13
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    相关资源
    最近更新 更多