2016-01-16 31 views
5

如何將兩個數組組合爲笛卡爾積?

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

我想array3其中與第一(和其他人)的array2元素等的array1所有元素

例如:

array3 = ["one 1", "two 1", "three 1", "four 1", "five 1", "one 2", "two 2", "three 2", "four 2", "five 2"...] 

我明白我需要使用循環,但我不知道該怎麼做。

+1

如果你是下劃線或lodash,簡單['zipWith'(https://lodash.com/docs#zipWith)會工作:'_.zipWith(數組1,數組2,功能( a,b){return a +''+ b;});' –

回答

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

真的很好。謝謝 – frostrock

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

6

然而,隨着reducemapconcat

摘錄另一種基於@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>');

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

[**注意**:for ... in不應該用於迭代索引順序非常重要的數組。](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...in) – Grundy

0

嘗試(JS)

function myFunction(){ 
      var F = [1, 2, 3, 4,5]; 
      var S = ["one", "two", "three", "four", "five"]; 
      var Result = []; 

      var k=0; 
      for (var i = 0; i < F.length; i++) { 
       for (var j = 0; j < S.length; j++) { 
        Result[k++] = S[j] + " " + F[i]; 
       } 
      } 

      console.log(Result); 
     } 
+1

這是一個JS問題。 OP可能能夠從中推斷代碼,但我認爲它不是很有用。 – Andy

+0

更正了它請檢查 –

3

array1.lengtharray2.length都是平等的,您可以使用此方法。

var array1 = [1, 2, 3, 4, 5]; 
 
var array2 = ["one", "two", "three", "four", "five"]; 
 
var length = array1.length; 
 
var array3 = new Array(Math.pow(length, 2)).fill(0).map((v, i) => array2[i % length] + ' ' + array1[i/length << 0]); 
 

 

 
document.body.textContent = JSON.stringify(array3);

+0

如果數組有不同的長度? – Grundy

+1

@Grundy這個問題沒有提到它。 – Lewis

+0

是的,但我認爲你應該添加改進,這項工作爲相同長度的數組 – Grundy