我正在用 JavaScript(使用 jQuery)制作一个应用程序,其中主要功能是创建独特的组合并按一定数量分组。但我做他们的方式似乎不是最好的方式。
例子:
var cadena = [1, 2, 3, 4, 5, 6, 7, 8]; //Caracteres que va a combinar
var arrayCombinaciones = []; //Almacena las combinaciones
var grupo = 3; //le indico la cantidad de cuantos caracteres quiero que sean las combinaciones.
var posicion = 0;
switch (grupo) {
case 2:
for (var i = 0; i < cadena.length; i++) {
for (var j = 0; j < cadena.length; j++) {
if (cadena[i] != cadena[j]) {
arrayCombinaciones[posicion++] = [cadena[i], cadena[j]];
}
}
}
break;
case 3:
for (var i = 0; i < cadena.length; i++) {
for (var j = 0; j < cadena.length; j++) {
for (var k = 0; k < cadena.length; k++) {
if (cadena[i] != cadena[j] && cadena[i] != cadena[k] && cadena[j] != cadena[k]) {
arrayCombinaciones[posicion++] = [cadena[i], cadena[j], cadena[k]];
}
}
}
}
break;
}
console.log(JSON.stringify(arrayCombinaciones));
如果组是两个,我需要制作两个for
并if
验证字符不相等并将组合存储在“arrayCombinaciones”中。在这种情况下,将它们按 2 分组的结果将是:
[["1","2"],["1","3"],["1","4"],["1","5"],["1","6"] ,["1","7"],["1","8"],["2","1"],["2","3"],["2","4"] ,["2","5"],["2","6"],["2","7"],["2","8"],["3","1"] ,["3","2"],["3","4"],["3","5"],["3","6"],["3","7"] ,["3","8"],["4","1"],["4","2"],["4","3"],["4","5"] ,["4","6"],["4","7"],["4","8"],["5","1"],["5","2"],["5","3"],["5","4"],["5","6"],["5", "7"],["5","8"],["6","1"],["6","2"],["6","3"],["6", "4"],["6","5"],["6","7"],["6","8"],["7","1"],["7", "2"],["7","3"],["7","4"],["7","5"],["7","6"],["7", "8"],["8","1"],["8","2"],["8","3"],["8","4"],["8", "5"],["8","6"],["8","7"]]2"],["5","3"],["5","4"],["5","6"],["5","7"],["5"," 8"],["6","1"],["6","2"],["6","3"],["6","4"],["6"," 5"],["6","7"],["6","8"],["7","1"],["7","2"],["7"," 3"],["7","4"],["7","5"],["7","6"],["7","8"],["8"," 1"],["8","2"],["8","3"],["8","4"],["8","5"],["8"," 6"],["8","7"]]2"],["5","3"],["5","4"],["5","6"],["5","7"],["5"," 8"],["6","1"],["6","2"],["6","3"],["6","4"],["6"," 5"],["6","7"],["6","8"],["7","1"],["7","2"],["7"," 3"],["7","4"],["7","5"],["7","6"],["7","8"],["8"," 1"],["8","2"],["8","3"],["8","4"],["8","5"],["8"," 6"],["8","7"]]["5","6"],["5","7"],["5","8"],["6","1"],["6","2"], ["6","3"],["6","4"],["6","5"],["6","7"],["6","8"], ["7","1"],["7","2"],["7","3"],["7","4"],["7","5"], ["7","6"],["7","8"],["8","1"],["8","2"],["8","3"], ["8","4"],["8","5"],["8","6"],["8","7"]]["5","6"],["5","7"],["5","8"],["6","1"],["6","2"], ["6","3"],["6","4"],["6","5"],["6","7"],["6","8"], ["7","1"],["7","2"],["7","3"],["7","4"],["7","5"], ["7","6"],["7","8"],["8","1"],["8","2"],["8","3"], ["8","4"],["8","5"],["8","6"],["8","7"]]2"],["6","3"],["6","4"],["6","5"],["6","7"],["6"," 8"],["7","1"],["7","2"],["7","3"],["7","4"],["7"," 5"],["7","6"],["7","8"],["8","1"],["8","2"],["8"," 3"],["8","4"],["8","5"],["8","6"],["8","7"]]2"],["6","3"],["6","4"],["6","5"],["6","7"],["6"," 8"],["7","1"],["7","2"],["7","3"],["7","4"],["7"," 5"],["7","6"],["7","8"],["8","1"],["8","2"],["8"," 3"],["8","4"],["8","5"],["8","6"],["8","7"]]["7","5"],["7","6"],["7","8"],["8","1"],["8","2"], ["8","3"],["8","4"],["8","5"],["8","6"],["8","7"]]["7","5"],["7","6"],["7","8"],["8","1"],["8","2"], ["8","3"],["8","4"],["8","5"],["8","6"],["8","7"]]
例如,如果我想要 10 人一组怎么办?我必须做10个嵌套,但这似乎不是最好的方法,我不知道是否有另一种方法可以避免for
根据指示的组号做这么多。简而言之,保持活力。
递归实现它的一种方法:
基本上,该函数遍历整个字母表并创建与字母表中的字符一样多的数组。当再次调用自身时,它会使用一个新的字母表,其中已删除使用的字符和一个不完整的结果数组。
当我已经使用了字符数量时,它会
n
完成最终的结果数组。版:我用这个返回包含 N 个成员组的结果的答案替换了我之前的答案。
我添加了另一个版本,既不使用 foreach 也不使用 map: