2013-04-12 2 views
1

У меня есть массив имен команд, которая так:JavaScript - отдельный массив в массив пар

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

Я хочу создать набор матчей, основываясь на этом, поэтому в данный момент, для набора совпадений с использованием массива команд вы получите:

teamMatches : [ 
    [ teams[0], teams[1] ], 
    [ teams[2], teams[3] ] 
] 

Мой вопрос, может кто-нибудь придумать способ, чтобы произвести этот teamMatches массив, основанный на массиве команд с длиной n. Массив команд всегда будет правильным числом, 4,8,16 и т. Д. Я попытался использовать Math.pow с 2, чтобы попытаться создать скобки без успеха.

Любые идеи?

ответ

1

Как об этом

var teams = ['team1', 'team2', 'team3', 'team4']; 
var teamMatches = new Array(); 
for(var i=0;i<teams.length; i+=2) 
{  
    teamMatches.push([teams[i],teams[i+1]]); 
} 
+1

Мне нравится это благодаря своей простоте, поэтому спасибо, не думал, что ответ был таким простым, как это, возможно, я переусердствовал. Это должно работать для массива размером 4/8/16 и т. Д., Не так ли? – germainelol

+0

Это замечательно. Вопрос был на самом деле намного проще, чем все думали сначала. Вопроситель не искал какой-то сложный циклический и т. Д. Алгоритм. –

+0

да, это будет работать для массива размером 4/8/16 и т. Д. – Gowsikan

3

Процедурное решение:

xs = [0,1,2,3,4,5,6,7,8,9] 
result = [] 
n = 2 // n=3 gives a list of triples, etc 
for(var i = 0; i < xs.length; i += n) 
    result.push(xs.slice(i, i + n)) 

Функциональное решение программирования:

function zip() { 
    var args = [].slice.call(arguments, 0); 
    return args[0].map(function(_, n) { 
     return args.map(function(a) {return a[n] }) 
    }) 
} 

xs = [0,1,2,3,4,5,6,7,8,9] 
result = zip(
    xs.filter(function(_, n) { return n % 2 == 0 }), 
    xs.filter(function(_, n) { return n % 2 != 0 }) 
) 
// [[0,1],[2,3],[4,5],[6,7],[8,9]] 

Объяснение: zip функция (встроенный в некоторых языках программирования, но не в JavaScript), который принимает N массивов и групп вместе в одном и том же положении:

zip([1,2,3], [10,20,30]) -> [ [1,10], [2,20], [3,30] ] 

Мы разделили массив на четные и нечетные части:

[0,2,4,6...] 
[1,3,5,7...] 

и zip их вместе, получить список упорядоченных пар.

+0

не должна быть Javascript хотя? –

+1

@meewoK: а? это javascript. – georg

+0

Ah..you реализована функция Zip в javascript. Хороший. –

Смежные вопросы