2015-05-28 73 views
3

我想找到一個高性能的方式來爲陣列中的球員創建比賽,並且爲所有球員在多維陣列中返回所有可能的比賽而不需要重複任何比賽。從陣列中產生所有可能的陣容比賽

這是我的例子:

// input 
var players = [ 
    {player: 'sam' }, {player: 'bob' }, {player: 'tim' }, {player: 'kevin' } 
]; 

// output 
var mathups = [ 
    [{player: 'sam'}, {player: 'bob}], 
    [{player: 'sam'}, {player: 'tim'}], 
    [{player: 'sam'}, {player: 'kevin'}], 
    [{player: 'bob'}, {player: 'tim'}], 
    [{player: 'bob'}, {player: 'kevin'}] 
    ... and so on 
]; 

有沒有人對如何做到這一點香草JS或使用類似lodash或下劃線有什麼建議?

回答

3

組合可以這樣產生沒有外部LIB:

var players = [ 
 
    {player: 'sam' }, {player: 'bob' }, {player: 'tim' }, {player: 'kevin' } 
 
]; 
 

 

 
var m = []; 
 

 
for (var i = 0; i < players.length; i++) { 
 
    for (var j = i+1; j < players.length; j++) { 
 
    m.push([players[i], players[j]]); 
 
    } 
 
} 
 
console.log(JSON.stringify(m,null, 2));

+0

很噁心。這比我想象的要容易得多。 – corbanb

1

這應該可以解決問題,假設有在名稱重複。

var players = [{ 
    player: 'sam' 
}, { 
    player: 'bob' 
}, { 
    player: 'tim' 
}, { 
    player: 'kevin' 
}]; 

function makeMatch() 
{ 

    var matchList = []; 

    for (var i=0; i<players.length; i++) 
    { 
     for (var j=i+1; j<players.length; j++) 
     { 
      matchList.push([{player: players[i].player}, {player: players[j].player}]); 
     } 
    } 

    console.log(matchList); 
} 

makeMatch();