1

次のようなチーム名の配列があります。

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

これに基づいて一連の試合を作成したいので、現時点では、teams 配列を使用した一連の試合では次のようになります。

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

私の質問は、 length の team 配列に基づいて、この teamMatches 配列を生成する方法を誰でも思いつくことができるかということnです。チームの配列は常に正しい数字、4、8、16 などになります。私はMath.pow2 を使用してブラケットを作成しようとしましたが、成功しませんでした。

何か案は?

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]]

説明: zipN 個の配列を取り、同じ位置で要素をグループ化する関数 (一部のプログラミング言語では組み込みですが、Javascript では組み込まれていません) です。

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 に答える