如何在JavaScript中生成两个不等长度数组之间的所有成对组合?

时间:2016-08-09 18:55:49

标签: javascript arrays

我想获得两个数组之间所有可能的对组合。阵列可以具有或不具有相同的大小。例如:

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);

5 个答案:

答案 0 :(得分: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 :(得分: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' ] ]

答案 2 :(得分:1)

更简单:

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

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

答案 3 :(得分: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"]]

答案 4 :(得分: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));

这将输出以下数组,将每个可能的对组合保存在数组中:

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