我想获得两个数组之间所有可能的对组合。阵列可以具有或不具有相同的大小。例如:
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);
答案 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' ] ] ]