JavaScript で、カードのデッキをシャッフルするかのように 2 つの配列をマージする簡単な方法はありますか?
例えば:
[ "1", "2", "3" ] + [ "a", "b", "c" ]
=> [「1」、「a」、「2」、「b」、「3」、「c」]
JavaScript で、カードのデッキをシャッフルするかのように 2 つの配列をマージする簡単な方法はありますか?
例えば:
[ "1", "2", "3" ] + [ "a", "b", "c" ]
=> [「1」、「a」、「2」、「b」、「3」、「c」]
このアクションは通常、「zip」と呼ばれます。
Underscore.jsにはそれが実装されています。
var a1 = [ "1", "2", "3" ];
var a2 = [ "a", "b", "c" ];
var zipped = _.zip(a1, a2);
ランダムな順序が必要な場合は、次を使用できますshuffle
。
var shuffled = _.shuffle(a1.concat(a2));
反復せずにそれを行うことはできませんが、一部の配列関数の背後に反復を隠すことができます。
var a = [ "1", "2", "3" ];
var b = [ "a", "b", "c" ];
// only works if a and b have the same length
var c = a.concat(b).map(function(item, index, arr){
return index % 2 ? arr[arr.length/2 + (index+1)/2 - 1] : arr[index/2];
});
console.log(c);