将具有值对的 N 个数组的数组拆分为集合 N 个集合
Splitting an array with N arrays of a value pair, into set N sets
有什么关于如何实现的帮助或建议吗?
我有一组8支队伍
teamArray =['Team_1', 'Team_2', 'Team_3', 'Team_4', 'Team_5', 'Team_6', 'Team_7', 'Team_8']
并使用以下函数对每支队伍进行配对,每队有 28 对
let pairs = teamArray.flatMap(
(v, i) => teamArray.slice(i+1).map( w => [v,w] )
);
现在我想把 28 对分成 7 个数组,每个数组有 4 个对,而每个数组不能有一个具有一个值的对超过一次?
所需输出的示例:
result = [
[['Team_1', 'Team_2'], ['Team_3', 'Team_4'], ['Team_5', 'Team_6'], ['Team_7', 'Team_8']],
[['Team_1', 'Team_3'], ['Team_2', 'Team_4'], ['Team_5', 'Team_7'], ['Team_6', 'Team_8']],
...]
似乎是数组的 reduce
方法的任务:
result = pairs.reduce((accumulator, currentPair) => {
let match = accumulator.find(array => !array.some(pair => currentPair.some(ci => pair.some(i => ci === i))));
if (match !== undefined) {
match.push(currentPair);
return accumulator;
}
else {
accumulator.push([currentPair]);
return accumulator;
}
}, []);
有什么关于如何实现的帮助或建议吗?
我有一组8支队伍
teamArray =['Team_1', 'Team_2', 'Team_3', 'Team_4', 'Team_5', 'Team_6', 'Team_7', 'Team_8']
并使用以下函数对每支队伍进行配对,每队有 28 对
let pairs = teamArray.flatMap(
(v, i) => teamArray.slice(i+1).map( w => [v,w] )
);
现在我想把 28 对分成 7 个数组,每个数组有 4 个对,而每个数组不能有一个具有一个值的对超过一次?
所需输出的示例:
result = [
[['Team_1', 'Team_2'], ['Team_3', 'Team_4'], ['Team_5', 'Team_6'], ['Team_7', 'Team_8']],
[['Team_1', 'Team_3'], ['Team_2', 'Team_4'], ['Team_5', 'Team_7'], ['Team_6', 'Team_8']],
...]
似乎是数组的 reduce
方法的任务:
result = pairs.reduce((accumulator, currentPair) => {
let match = accumulator.find(array => !array.some(pair => currentPair.some(ci => pair.some(i => ci === i))));
if (match !== undefined) {
match.push(currentPair);
return accumulator;
}
else {
accumulator.push([currentPair]);
return accumulator;
}
}, []);