0

I have two 2d arrays:

var ar1 = [];
var ar1[0] = [];
var ar1[0][0] = 1;
var ar1[0][1] = 2;
var ar1[1] = [];
var ar1[1][0] = 3;
var ar1[1][1] = 4;

var ar2 = [];
var ar2[0] = [];
var ar2[0][3] = 5;
var ar2[0][4] = 6;
var ar2[1] = [];
var ar2[1][5] = 7;
var ar2[1][6] = 8;

How can I get the combined array that will look like:

var ar1[0][0] = 1;
var ar1[0][1] = 2;
var ar1[1][0] = 3;
var ar1[1][1] = 4;
var ar1[0][3] = 5;
var ar1[0][4] = 6;
var ar1[1][5] = 7;
var ar1[1][6] = 8;

I tried:

ar1.push(ar2);

but this puts whole ar2 to the first empty row of ar1.

2 Answers 2

2

One possibility is to forEach over the second array, and Object.assign each subarray onto the appropriate index in the first:

var ar1 = [];
ar1[0] = [];
ar1[0][0] = 1;
ar1[0][1] = 2;
ar1[1] = [];
ar1[1][0] = 3;
ar1[1][1] = 4;

var ar2 = [];
ar2[0] = [];
ar2[0][3] = 5;
ar2[0][4] = 6;
ar2[1] = [];
ar2[1][5] = 7;
ar2[1][6] = 8;

ar2.forEach((subarr2, i) => {
  Object.assign(ar1[i], subarr2);
});
console.log(ar1);

Do note that var should only be used when declaring a new variable name for the first time - when assigning to an existing variable, omit it. (Also, sparse arrays are rarely a good idea)

Sign up to request clarification or add additional context in comments.

Comments

0

You could iterate the second array and assign all values to the first array. For not given array in the second level take an array as default.

var ar1 = [],
    ar2 = [];

ar1[0] = [];
ar1[0][0] = 1;
ar1[0][1] = 2;
ar1[1] = [];
ar1[1][0] = 3;
ar1[1][1] = 4;

ar2[0] = [];
ar2[0][3] = 5;
ar2[0][4] = 6;
ar2[1] = [];
ar2[1][5] = 7;
ar2[1][6] = 8;

ar2.forEach((a, i) => {
    ar1[i] = ar1[i] || [];
    a.forEach((v, j) => ar1[i][j] = v);
});
console.log(ar1);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.