2016-01-16 6 views
5

Ich habeWie können zwei Arrays als kartesisches Produkt kombiniert werden?

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

Ich mag array3 zu bekommen, wo alle Elemente array1 mit erstem (und anderen) Elemente array2 und etc.

Zum Beispiel:

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

Ich verstehe, dass Ich brauche For-Schleife, aber ich weiß nicht, wie es geht.

+1

Wenn Sie Strich oder lodash, ein einfaches [ 'zipWith'] (https://lodash.com/docs#zipWith) funktionieren würde:' _.zipWith (array1, array2, Funktion (a, b) {return a + '' + b;}); ' –

Antwort

11

Sie können zwei for-Schleifen verwenden:

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

wirklich nice.Thanks – frostrock

12

Sie Array.prototype.forEach() für die Iteration über die Arrays verwenden können.

Die Methode forEach() führt eine angegebene Funktion einmal pro Array-Element aus.

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

Noch eine andere Art und Weise mit reduce und map und concat

Snippet basierend auf @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

Es gibt immer noch die Möglichkeit, mit Schlaufen:

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

[** Hinweis **: for ... in sollte nicht verwendet werden, um über ein Array zu iterieren, wo die Indexreihenfolge wichtig ist .] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...in) – Grundy

0

Try (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

Dies ist eine JS-Frage. Das OP könnte möglicherweise Code daraus extrapolieren, aber ich denke nicht, dass es nützlich ist. – Andy

+0

Korrigiert es bitte überprüfen –

3

Sie diese Methode verwenden können, wenn array1.length und array2.length gleich sind.

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

was ist, wenn Array unterschiedliche Länge haben? – Grundy

+1

@Grundy Diese Frage erwähnt es nicht. – Lewis

+0

Ja, aber ich denke, Sie sollten Verfeinerung hinzufügen, dass dies für Array mit gleichen Längen funktioniert – Grundy