【发布时间】: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