如何将两个阵列组合成笛卡尔积?

fro*_*ock 5 javascript arrays loops cartesian-product

我有

array1 = [1,2,3,4,5];
array2 = ["one","two","three","four","five"];
Run Code Online (Sandbox Code Playgroud)

我希望得到第一个(和其他)元素等array3所有元素的位置.array1array2

例如:

array3 = ["one 1", "two 1", "three 1", "four 1", "five 1", "one 2", "two 2", "three 2", "four 2", "five 2"...]
Run Code Online (Sandbox Code Playgroud)

我知道我需要使用for循环,但我不知道该怎么做.

Nin*_*olz 12

您可以使用Array.prototype.forEach()数组上的迭代.

forEach()方法每个数组元素执行一次提供的函数.

var array1 = [1, 2, 3, 4, 5],
    array2 = ["one", "two", "three", "four", "five"],
    result = [];

array1.forEach(function (a) {
    array2.forEach(function (b) {
        result.push(b + ' ' + a);
    });
});

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
Run Code Online (Sandbox Code Playgroud)


mad*_*ox2 11

您可以使用两个for循环:

var array1 = [1,2,3,4,5];
var array2 = ["one","two","three","four","five"];

var array3 = [];
for (var i = 0; i < array1.length; i++) {
    for (var j = 0; j < array2.length; j++) {
        array3.push(array2[j] + ' ' + array1[i]);
    }
}

console.log(array3);
Run Code Online (Sandbox Code Playgroud)


Gru*_*ndy 6

另一种方法是减少映射连接

基于@Nina Scholz的片段

var array1 = [1, 2, 3, 4, 5],
    array2 = ["one", "two", "three", "four", "five"];

var result = array1.reduce(function (acc, cur) {
    return acc.concat(array2.map(function (name) {
        return name + ' ' + cur;
    }));
},[]);

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
Run Code Online (Sandbox Code Playgroud)


ale*_*x10 5

循环仍然有选项:

var array2 = [1,2,3,4,5],
array1 = ["one","two","three","four","five"],
m = [];
for(var a1 in array1){  
  for(var a2 in array2){
      m.push( array1[a1]+ array2[a2] );    
  }
}
console.log(m);
Run Code Online (Sandbox Code Playgroud)

  • [**Note**:for ... in不应该用于迭代索引顺序很重要的数组.](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/声明/对...的) (3认同)