2016-08-09 6 views
-1

2つの配列の間に可能なすべてのペアの組み合わせを取得したいと考えています。配列は、同じサイズであっても異なっていてもよい。たとえば:JavaScriptで長さが違う2つの配列間のペアごとの組み合わせを生成するにはどうすればよいですか?

arr1 = ["tom", "sue", "jim"]arr2 = ["usa", "japan"]は、次のペアをもたらすであろう:

["tom", "usa"] 
["tom", "japan"] 
["sue", "usa"] 
["sue", "japan"] 
["jim", "usa"] 
["jim", "japan"] 
私がこれまでの配列は等しくない長さであればすべてのペアを返さない以下のコードであり、したもの

var pairs= []; 
    for (var i = 0; i < arr1.length; i++) { 
     for (var j = 0; j < arr2.length; j++) { 
       pairs.push(arr1[i] + arr2[j]); 
      } 
     } 
    console.log(pairs); 
+1

この例では、[["tom"、 "usa"] 'が3回リストされています。 2アイテム* 3アイテムの場合、6つの組み合わせが必要です。 – ssube

+2

あなたのコードは問題ありません... –

+1

'for'ループのあとの不要な'} 'を除いて、あなたのコードは正常に動作します。 – Pointy

答えて

1

コードは問題ありません。構造と似た構造を得るには、値を配列に囲むことができます。

let arr1 = ["tom", "sue", "jim"]; 
 
let arr2 = ["usa", "japan"]; 
 

 
let pairs = []; 
 
for (var i = 0; i < arr1.length; i++) { 
 
    for (var j = 0; j < arr2.length; j++) { 
 
    pairs.push([arr1[i], arr2[j]]); 
 
    } 
 
} 
 
console.log(pairs);

1
var arr1 = ["tom", "sue", "jim"]; 
var arr2 = ["usa", "japan"]; 
var pairs = []; 

arr1.forEach(x => {arr2.forEach(y => {pairs.push([x, y])})}); 
console.log(pairs); // [ [ 'tom', 'usa' ], 
         [ 'tom', 'japan' ], 
         [ 'sue', 'usa' ], 
         [ 'sue', 'japan' ], 
         [ 'jim', 'usa' ], 
         [ 'jim', 'japan' ] ] 
1

でもsimplier:

var arr1 = ["tom", "sue", "jim"]; 
var arr2 = ["usa", "japan"]; 

pairs = arr1.map(el1 => arr2.map(el2 => [el1, el2])) 
console.log(pairs) 
0

あなたは次の関数で配列を組み合わせることができます

var arr1 = ["tom", "sue", "jim"]; 
var arr2 = ["usa", "japan"]; 

function combine() { 
    [].sort.call(arguments, (a, b) => b.length - a.length); 
    return arguments[0].map(n => arguments[1].map(a => [n, a])); 
} 

console.log(combine(arr1, arr2)); 

これはoutpuますアレイ内の各可能な対の組み合わせを保持し、次の配列をT:他の人が指摘しているよう

[ [ [ 'tom', 'usa' ], [ 'tom', 'japan' ] ], 
    [ [ 'sue', 'usa' ], [ 'sue', 'japan' ] ], 
    [ [ 'jim', 'usa' ], [ 'jim', 'japan' ] ] ] 
1

var arr1 = ["tom", "sue", "jim"] 
 
var arr2 = ["usa", "japan"]; 
 

 
var pairs = arr1.reduce((p, c) => p.concat(arr2.map(v => [c].concat(v))), []) 
 

 
console.log(pairs)

、コードは結構です。あなたのニーズがどのように生成されるかについての他の選択肢を探求したい場合に備えて、私はこの選択肢だけをオフにします。

var arr1 = ["tom", "sue", "jim"], arr2 = ["usa", "japan"]; 

var pairs = arr1.reduce((p, c) => p.concat(arr2.map(v => [c].concat(v))), []) 

// returns: You have an array OF arrays 
[["tom","usa"], 
["tom","japan"], 
["sue","usa"], 
["sue","japan"], 
["jim","usa"], 
["jim","japan"]] 
関連する問題