1

我有一组团队名称,如下所示:

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

我想基于此创建一组匹配,所以目前,对于使用 teams 数组的一组匹配,您将获得:

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

我的问题是,任何人都可以想出一种方法来基于长度为的团队数组生成这个 teamMatches 数组n。团队数组将始终是正确的数字,4,8,16 等。我尝试使用Math.powwith 2 来尝试生成括号但没有成功。

有任何想法吗?

4

2 回答 2

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它们放在一起,得到有序对的列表。

于 2013-04-12T11:41:44.077 回答
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]]);
}
于 2013-04-12T11:48:47.813 回答