How to combine two arrays in the form of a Cartesian product?

I have

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

I want to get array3 , where all elements of array1 with the first (and other) element of array2 , etc.

For instance:

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

I understand what I need to use for the loop, but I don't know how to do it.

+5
source share
6 answers

You can use two for-loops:

 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); 
+11
source

You can use Array.prototype.forEach() to iterate over arrays.

The forEach() method executes the provided function once for an array element.

 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>'); 
+12
source

Another way: reduce and map and concat

Fragment based on @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>'); 
+6
source

There is another option with loops:

 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); 
+5
source

You can use this method when array1.length and array2.length are equal.

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

Try it (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); } 
0
source

Source: https://habr.com/ru/post/1240751/


All Articles