Javascript 从名称列表中获取所有可能的对
假设我有一个名称数组,例如:Javascript 从名称列表中获取所有可能的对,javascript,arrays,Javascript,Arrays,假设我有一个名称数组,例如: let members = ["John", "Marie", "Ivy", "Daniel"]; 每个人都必须向另一个人交付一件独特的物品。以下是1个组合集的示例: [ {"John":"Marie"}, {"Marie":"Ivy"}, {"Ivy":"Daniel"}, {"Daniel":"John"}, ] 接收者只能被命名一次。我想检索所有可能组合的数组。获取这样一个数组的最简单方法是什么 编辑:很多反对票。恐怕是合理
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);
})
试试这个
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);
谢谢你的贡献。给我一个密码就行了。我在寻找所有可能的组合。