Javascript 在数组中查找两个组合的所有可能集合

Javascript 在数组中查找两个组合的所有可能集合,javascript,arrays,combinations,Javascript,Arrays,Combinations,给定一个大小为n且总是偶数的数组,我需要输出2对元素的所有可能组合 我有这个: let teams = ["team1","team2","team3","team4"] 我尝试的是: function pairs(arr) { var res = [], l = arr.length; for(var i=0; i<l; ++i) for(var j=i+1; j<l; ++j) res.push([arr[

给定一个大小为n且总是偶数的数组,我需要输出2对元素的所有可能组合

我有这个:

let teams = ["team1","team2","team3","team4"]
我尝试的是:

function pairs(arr) {
    var res = [],
        l = arr.length;
    for(var i=0; i<l; ++i)
        for(var j=i+1; j<l; ++j)
            res.push([arr[i], arr[j]]);
    return res;
}

pairs(teams).forEach(function(pair){
    console.log(pair);
});

//outputs

[ 'team1', 'team2' ]
[ 'team1', 'team3' ]
[ 'team1', 'team4' ]
[ 'team2', 'team3' ]
[ 'team2', 'team4' ]
[ 'team3', 'team4' ]
因此,我的预期输出是上面的结果和我在上面发布的代码中的先前结果


请注意,只要我得到所有可能的组合,我就不需要按特定顺序使用它们。

如果你想得到所有可能的组合,包括反向重复,你也需要将j循环从0迭代到数组的长度

for(设i=0;i
如果您想要获得所有可能的组合,包括反向重复,您还需要将j循环从0迭代到数组的长度

for(设i=0;i
for(var i=0;i
for(var i=0;i函数JS:

let teams=[“team1”、“team2”、“team3”、“team4”];
var结果=团队。平面图((v)=>
团队。
过滤器(w=>v!=w)。
地图(w=>[v,w])
);
console.log(结果);
函数JS:

let teams=[“team1”、“team2”、“team3”、“team4”];
var结果=团队。平面图((v)=>
团队。
过滤器(w=>v!=w)。
地图(w=>[v,w])
);

console.log(result);
如果你想做比这个简单示例更多的组合运算,那么你可以使用这个包。例如:

const Combinatorics = require('js-combinatorics');

const teams = ['team1', 'team2', 'team3', 'team4'];

const matches = Combinatorics.permutation(teams, 2).toArray();

console.log(matches);
输出为:

[
  [ 'team1', 'team2' ],
  [ 'team2', 'team1' ],
  [ 'team1', 'team3' ],
  [ 'team3', 'team1' ],
  [ 'team2', 'team3' ],
  [ 'team3', 'team2' ],
  [ 'team1', 'team4' ],
  [ 'team4', 'team1' ],
  [ 'team2', 'team4' ],
  [ 'team4', 'team2' ],
  [ 'team3', 'team4' ],
  [ 'team4', 'team3' ]
]

如果您打算做比这个简单示例更多的组合运算,那么您可以使用该软件包。例如:

const Combinatorics = require('js-combinatorics');

const teams = ['team1', 'team2', 'team3', 'team4'];

const matches = Combinatorics.permutation(teams, 2).toArray();

console.log(matches);
输出为:

[
  [ 'team1', 'team2' ],
  [ 'team2', 'team1' ],
  [ 'team1', 'team3' ],
  [ 'team3', 'team1' ],
  [ 'team2', 'team3' ],
  [ 'team3', 'team2' ],
  [ 'team1', 'team4' ],
  [ 'team4', 'team1' ],
  [ 'team2', 'team4' ],
  [ 'team4', 'team2' ],
  [ 'team3', 'team4' ],
  [ 'team4', 'team3' ]
]

所以你得到的是
['team1','team2']
,但你想同时得到
['team1','team2']
['team2','team1']
?如果是的话,那你为什么说“你不需要按特定顺序使用它们”?你能不能把当前的输出加上数组作为
你的阵型?@skyboyer我想很清楚我指的是输出。这是比赛日程安排,所以每个队都应该主客场比赛。当顺序不重要时,这是一个组合。当顺序重要时,这是一个排列。是的,但我不需要任何顺序,我指的是成对的输出。所以你得到了
['team1','team2']
但是想要同时获得
['team1','team2']
['team2','team1']
?如果是,那么为什么说“您不需要按特定顺序使用它们”?您不能只获取当前输出并添加
.reverse()数组吗
你的阵型?@skyboyer我想很清楚我指的是输出。这是比赛日程安排,所以每支球队都应该主客场比赛。当顺序不重要时,这是一个组合。当顺序重要时,这是一个排列。是的,但我不需要任何顺序,我指的是成对的输出。注意,如果使用Node.js,这并不重要his需要11.0.0或更高版本。请注意,如果使用Node.js,这需要11.0.0或更高版本。我认为这是一个不错的选择,我会尝试,因为我以后需要更复杂的组合数学。我认为这是一个不错的选择,我会尝试,因为我以后需要更复杂的组合数学。
[
  [ 'team1', 'team2' ],
  [ 'team2', 'team1' ],
  [ 'team1', 'team3' ],
  [ 'team3', 'team1' ],
  [ 'team2', 'team3' ],
  [ 'team3', 'team2' ],
  [ 'team1', 'team4' ],
  [ 'team4', 'team1' ],
  [ 'team2', 'team4' ],
  [ 'team4', 'team2' ],
  [ 'team3', 'team4' ],
  [ 'team4', 'team3' ]
]