我有一系列团队名称,如下所示:
teams = ['team1', 'team2', 'team3', 'team4']
我想基于此创建一组匹配,所以目前,对于使用teams数组的一组匹配,您将得到:
teamMatches : [
[ teams[0], teams[1] ],
[ teams[2], teams[3] ]
]
我的问题是,有没有人能想到基于长度为n
的团队数组生成这个teamMatches数组的方法。团队数组将始终是正确的数字,4,8,16等。我尝试使用Math.pow
和2来尝试生成括号但没有成功。
有什么想法吗?
答案 0 :(得分: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
他们在一起,获得有序对的列表。
答案 1 :(得分: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]]);
}