javascript arrays

javascript - matrices concat con forEach



arrays (4)

¿Qué tal esto?

var array3 = array1.map((a, idx) => [...a, ...array2[idx]] )

Tengo dos matrices que se componen de 20 matrices de objetos. Me gusta esto:

var array1 = [ [ {''x'':0,''y'':0}, {''x'':0,''y'':0} ], [ {''x'':1,''y'':1}, {''x'':1,''y'':1} ], ... [ {''x'':19,''y'':19}, {''x'':19,''y'':19} ] ]; var array2 = [ [ {''x'':0,''y'':0}, {''x'':0,''y'':0} ], [ {''x'':1,''y'':1}, {''x'':1,''y'':1} ], ... [ {''x'':19,''y'':19}, {''x'':19,''y'':19} ] ];

Quiero que el resultado final sea:

[ [ {''x'':0,''y'':0}, {''x'':0,''y'':0}, {''x'':0,''y'':0}, {''x'':0,''y'':0} ], ... ];

Así que adjunto dos elementos en cada matriz, lo que significa que cada matriz debería contener cuatro objetos ahora.

Lo que probé fue:

var array3 = array1; array3.forEach(function(item,i) { item.concat(array2[i]) })

Pero no se agregó nada

Pregunta

¿Existe un enfoque menos minucioso para los artículos de concat de forma iterativa?


Esta es una operación "zip" bastante típica, que se puede lograr usando el map .

var array1 = [ [ {''x'':0,''y'':0}, {''x'':0,''y'':0} ], [ {''x'':1,''y'':1}, {''x'':1,''y'':1} ], [ {''x'':19,''y'':19}, {''x'':19,''y'':19} ] ]; var array2 = [ [ {''x'':0,''y'':0}, {''x'':0,''y'':0} ], [ {''x'':1,''y'':1}, {''x'':1,''y'':1} ], [ {''x'':19,''y'':19}, {''x'':19,''y'':19} ] ]; var result = array1.map( (item,i) => item.concat(array2[i])); console.log(result);


Si asigna var array3 = array1 y array3 , también cambiará array1 porque ambos hacen referencia a la misma matriz.

Puede map la primera matriz y concat cada matriz interna en función de la array2 basada en el índice

const array3 = array1.map((o, i) => o.concat(array2[i]))

o en ES5:

var array3 = array1.map(function(o, i) { return o.concat(array2[i]) })

const array1=[[{x:0,y:0},{x:0,y:0}],[{x:1,y:1},{x:1,y:1}],[{x:19,y:19},{x:19,y:19}]], array2=[[{x:0,y:0},{x:0,y:0}],[{x:1,y:1},{x:1,y:1}],[{x:19,y:19},{x:19,y:19}]]; const array3 = array1.map((o, i) => o.concat(array2[i])) console.log(array3)


Array.concat() no está mutando la matriz original, lo que significa que crea una nueva instancia de matriz.

Por lo tanto, debe asignar una matriz concatenada al valor original.

var array3 = array1; // If you don''t want to mutate ''array1, use spread operator like following: // var array3 = [...array1]; array3.forEach(function(item,i) { array3[i] = item.concat(array2[i]) })