Tengo dos matrices que siempre tendrán la misma cantidad de elementos dentro de ellas.
var array1 = [["John","Barry","Anne"],["Greg"],["Tom"],["Roy","Rye"]] var array2 = ["Banana","Orange","Apple","Grape","Pineapple","Raspberry","Pear"] Quiero que array2 tenga la misma estructura de matriz que array1 , por lo que debería verse así:
var newArray = [["Banana","Orange","Apple"],["Grape"],["Pineapple"],["Raspberry","Pear"]] Intenté usar la length de array1 para crear primero una new array de la length correcta y luego recorrer esa array para crear las nested arrays con la length correcta. Luego, usando un for loop , empujando array2's element a esta new array , pero tengo problemas para descubrir cómo hacerlo.
var array = new Array(array1.length) var arrayLength = array1.map(x => x.length) for (var i = 0; i < array.length; i++) { array[i] = new Array(arrayLength[i]); } for (var k = 0; k < array.length; k++) { for (var j = 0; j < array[k].length; j++) { array[0][k].push(array2[j]) } }¡Gracias por cualquier ayuda!
Puede usar .map() y .splice() para obtener el resultado esperado.
Si no se permite cambiar array2 , necesitamos una copia -> .slice()
const array1 = [["John", "Barry", "Anne"], ["Greg"], ["Tom"], ["Roy", "Rye"]]; const array2 = ["Banana", "Orange", "Apple", "Grape", "Pineapple", "Raspberry","Pear"]; // if array2 can be modified, then this is not necessary // and you have to replace <clone> with <array2> in the block below const clone = array2.slice(); const newArray = array1.map(inner => { return clone.splice(0, inner.length); }); console.log(newArray);Respuesta para la primera versión de la pregunta.
Solo necesitas .map() (dos veces) y un poco de matemática para esto.
const array1 = [ [1, 2, 3], [4], [5], [6, 7] ]; const array2 = ["Banana", "Orange", "Apple", "Grape", "Pineapple", "Raspberry", "Pear"]; const newArray = array1.map(inner => { return inner.map(n => { return array2[n - 1]; }) }); console.log(newArray); (se puede escribir como una sola línea, pero para facilitar la lectura he usado un return explícito)
const array1 = [["John", "Barry", "Anne"], ["Greg"], ["Tom"], ["Roy", "Rye"]]; const array2 = ["Banana", "Orange", "Apple", "Grape", "Pineapple", "Raspberry","Pear"]; let indexTracker=0; const newArr = array1.map(nameArr => nameArr.map(_ => array2[indexTracker++])); console.log(newArr);Utilice Array.map() y Array.slice() para obtener el resultado final.
const array1 = [[1, 2, 3], [4], [5], [6, 7]] const array2 = ["Banana", "Orange", "Apple", "Grape", "Pineapple", "Raspberry", "Pear"] let index = 0; const finalArray = array1.map((itemList) => { const list = array2.slice(index, index + itemList.length); index += itemList.length; return list; }); console.log(finalArray);