Tengo una matriz que se ve así:
arr = [[1,2,3], [4,5,6], [7,8,9]]He inicializado una matriz vacía y quiero colocar las diagonales de la matriz dentro de la nueva matriz. Así que he intentado esto:
arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] new_arr = []; tail = arr.length - 1; for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr[i].length; j++) { if (j == i) { new_arr.push(arr[i][j]); } if (j == tail) { new_arr.push(arr[i][j]); tail--; } } } console.log(new_arr)La lógica parece funcionar, pero parece que no puedo obtener la estructura correcta. Lo que quiero es anidar dos matrices dentro de la nueva matriz de esta manera:
[[1,5,9],[3,5,7]]Pero lo que obtengo es una matriz con los valores correctos desordenados. ¿Cómo obtener el resultado esperado? Cualquier ayuda es apreciada. ¡Gracias!
var arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; var diagonal1 = []; var diagonal2 = []; for (var i = 0; i < arr.length; i++) { diagonal1.push(arr[i][i]); diagonal2.push(arr[i][arr.length - i - 1]); } var new_arr = [diagonal1, diagonal2]; console.log(new_arr)La siguiente solución funcionaría si el ancho y el alto de la matriz numérica son siempre iguales.
const arr = [[1,2,3], [4,5,6], [7,8,9]]; const result = [[],[]]; arr.map((row,index) => { result[0].push(row[0+index]); result[1].push(row[row.length - index - 1]); }); console.log(result); // [[1,5,9],[3,5,7]]Necesita tener 2 matrices temporales separadas. Y no necesitas bucles anidados . Puede optimizar el código de esta manera con un solo ciclo si comprende las matemáticas.
arr = [[1,2,3], [4,5,6], [7,8,9]]; function findDiagonals(arr) { const diagonal_1 = []; const diagonal_2 = []; for( let i = 0; i < arr.length; i++ ) { diagonal_1.push(arr[i][i]); diagonal_2.push(arr[i][arr.length - (i+1)]); } return [diagonal_1, diagonal_2]; } console.log(findDiagonals(arr));