如何从球员列表生成所有3人组合团队?修正现有代码问题
解决3人团队组合生成问题
你的代码问题出在这几点:
- 只用了两层循环,靠
j+1取第三个元素,只能拿到连续相邻的三元组,漏掉了像['a','b','d']这种非连续的组合; - 当
j遍历到数组最后一个索引时,j+1会超出数组长度,导致第三个元素是undefined; - 每次循环都直接覆盖
team变量,没有把生成的组合收集起来,最后只能得到最后一次循环的结果。
要生成所有不重复的3人组合,需要用三层嵌套循环,每层的起始索引都比上一层大1,确保每个元素只被选一次,同时用一个数组收集所有组合:
const data = ['a', 'b', 'c', 'd']; const teams = []; // 三层循环,每层索引依次递增,避免重复组合 for (let i = 0; i < data.length; i++) { for (let j = i + 1; j < data.length; j++) { for (let k = j + 1; k < data.length; k++) { teams.push([data[i], data[j], data[k]]); } } } // 打印所有组合 teams.forEach(team => console.log(team));
运行这段代码后,就能得到你期望的输出:
['a', 'b', 'c'] ['a', 'b', 'd'] ['a', 'c', 'd'] ['b', 'c', 'd']
逻辑说明:
- 第一层循环
i选第一个元素,范围是整个数组; - 第二层循环
j从i+1开始,保证选的元素在i之后,不会重复选i对应的元素; - 第三层循环
k从j+1开始,保证选的元素在j之后,不会重复选i和j对应的元素; - 每次生成的组合都push到
teams数组里,最后就能收集到所有3人组合。
内容的提问来源于stack exchange,提问作者MouseWarrior
相关产品推荐
相关产品推荐

