Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

164
Vistas
¿Convertir una matriz de 9x9 en una matriz de 9 (3x3) en javascript?

¿Convertir una matriz de 9x9 en una matriz de 9 (3x3) en javascript? He escrito el código, pero no está empujando los 3x3 en una matriz separada. quiero 9 arreglos de 3x3

 let array = [ [1, 2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 1, 5, 6, 4, 8, 9, 7], [3, 1, 2, 6, 4, 5, 9, 7, 8], [4, 5, 6, 7, 8, 9, 1, 2, 3], [5, 6, 4, 8, 9, 7, 2, 3, 1], [6, 4, 5, 9, 7, 8, 3, 1, 2], [7, 8, 9, 1, 2, 3, 4, 5, 6], [8, 9, 7, 2, 3, 1, 5, 6, 4], [9, 7, 8, 3, 1, 2, 6, 4, 5] ]; let final=[]; let row = [0,1,2]; let col = [0,1,2]; let counter = 0; for ( let i = 0 ; i <= array.length - 1 ; i += 3 ) { for(let j = 0 ; j <= array.length - 1 ; j += 3 ) { final.push([]); row.forEach( ele1 => { final[counter].push([]) col.forEach( ele2 => { final[counter][ele1].push(array[ele1+i][ele2+j]); }) }) counter+=1; } } console.log(final)

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Puede recorrer la matriz utilizando la función de mapa y verificar que los valores del índice se dividan en matrices según sea necesario.

 let myArr =[[1, 2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 1, 5, 6, 4, 8, 9, 7], [3, 1, 2, 6, 4, 5, 9, 7, 8], [4, 5, 6, 7, 8, 9, 1, 2, 3], [5, 6, 4, 8, 9, 7, 2, 3, 1], [6, 4, 5, 9, 7, 8, 3, 1, 2], [7, 8, 9, 1, 2, 3, 4, 5, 6], [8, 9, 7, 2, 3, 1, 5, 6, 4], [9, 7, 8, 3, 1, 2, 6, 4, 5]]; let newArr = convertTo3x3(myArr); console.log(newArr); function convertTo3x3(myArr){ let array3x3 = []; myArr.map((row, rIndex) => { let tempArr = []; let row3 = []; row.map((item, lIndex) => { // convert each row to 3x3 rows if(lIndex % 3 == 0){ // reset row3 for new 3x3 arr on every 1st item of 3x3 row3 = []; } row3.push(item); if(lIndex % 3 == 2){ // push 3x3 row to tempArr on every 3rd item of 3x3 tempArr.push(row3); } }); array3x3.push(tempArr); }); return array3x3; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Su código parece funcionar bien, pero si desea un código más javascript, que funcione peor, aquí lo tiene.

 let array = [ [1, 2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 1, 5, 6, 4, 8, 9, 7], [3, 1, 2, 6, 4, 5, 9, 7, 8], [4, 5, 6, 7, 8, 9, 1, 2, 3], [5, 6, 4, 8, 9, 7, 2, 3, 1], [6, 4, 5, 9, 7, 8, 3, 1, 2], [7, 8, 9, 1, 2, 3, 4, 5, 6], [8, 9, 7, 2, 3, 1, 5, 6, 4], [9, 7, 8, 3, 1, 2, 6, 4, 5], ]; let final = []; array .reduce((a, c) => { const chunk = (arr, n) => arr.length ? [arr.slice(0, n), ...chunk(arr.slice(n), n)] : []; return [...a, ...chunk(c, 3)]; }, []) .map((el, i) => { if (i % 3 == 0) { final = [...final, [el]]; } else { final[Math.floor(i / 3)] = [...final[Math.floor(i / 3)], el]; } }); console.log(final);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Su código está tratando de hacer demasiado. Haz que sea difícil de entender.

Primero lo rompería. Escriba una función simple que sepa cómo tomar una matriz de matrices y devolver una selección rectangular arbitraria a partir de ella. Algo como esto, eso es fácil de probar:

 /** * Snip a rectangular section of an array of arrays (ragged, 2D array). * The returned array-of-arrys will ALWAYS be the specified size, padded * with 'undefined' values to the specified size. * * @param {Object[][]} arr - An array of arrays (ragged 2D array) * @param {number} row - Origin row: {row,col} denotes the upper-left corner of the rectangle to snip * @param {number} col - Origin column: {row,col} denotes the upper-left corner of the rectangle to snip * @param {number} nrows - Number of rows to snip * @param {number} ncols - Nunber of columns to snip * * @returns {Object[][]} */ function snip(arr, row, col, nrows, ncols ) { const selection = []; for ( let r = row, i = 0 ; r < row+nrows ; ++r, ++i ) { selection[i] = []; const tmp = arr[r] ?? []; for ( let c = col, j = 0 ; c < col+ncols ; ++c, ++j ) { selection[i][j] = tmp[c]; } } return selection; }

Una vez que tenga eso, es fácil dividir su matriz de matrices más grande en matrices de 3x3.

Este código comienza en la esquina superior izquierda o en su matriz de 9x9 y devuelve una lista plana que contiene 9 matrices separadas de 3x3, recortadas de izquierda a derecha y de arriba a abajo:

 final = []; for ( let x = 0 ; x < 9; x += 3 ) { for ( let y = 0 ; y < 9 ; y += 3 ) { // (x,y) denotes the top left corner of the desired sub-array final.push( snip(arr, x,y, 3,3 ) ); } }

Lo bueno de este enfoque es que es fácil de probar y . . . es flexible Puede manejar una matriz de origen de cualquier tamaño y puede dividirla en subarreglos de cualquier tamaño y en cualquier orden, lo que crea conveniente.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda