38 votes

Convertir un tableau simple en tableau bidimensionnel (matrice)

Imaginez que j'ai un tableau :

A = Array(1, 2, 3, 4, 5, 6, 7, 8, 9);

Et je veux qu'il soit converti en tableau à 2 dimensions (matrice de N x M), par exemple comme ceci :

A = Array(Array(1, 2, 3), Array(4, 5, 6), Array(7, 8, 9));

Notez que les lignes et les colonnes de la matrice sont modifiables.

1voto

SayedRakib Points 106
function chunkArrToMultiDimArr(arr, size) {

    var newArray = [];

    while(arr.length > 0)
    {
      newArray.push(arr.slice(0, size));
      arr = arr.slice(size);
    }

  return newArray;
}

//example - call function
chunkArrToMultiDimArr(["a", "b", "c", "d"], 2);

1voto

cooogeee Points 103

Vous pouvez utiliser push et slice comme ceci

var array = [1,2,3,4,5,6,7,8,9] ;
var newarray = [[],[]] ;
newarray[0].push(array) ;
console.log(newarray[0]) ;

La sortie sera

[[1, 2, 3, 4, 5, 6, 7, 8, 9]]

si vous voulez diviser un tableau en 3 tableaux

var array = [1,2,3,4,5,6,7,8,9] ;
var newarray = [[],[]] ;
newarray[0].push(array.slice(0,2)) ;
newarray[1].push(array.slice(3,5)) ;
newarray[2].push(array.slice(6,8)) ;

au lieu de trois lignes, vous pouvez utiliser splice

while(array.length) newarray.push(array.splice(0,3));

1voto

Daomtthuan Points 19
const x: any[] = ['abc', 'def', '532', '4ad', 'qwe', 'hf', 'fjgfj'];

// number of columns
const COL = 3;

const matrix = array.reduce((matrix, item, index) => {
  if (index % COL === 0) {
    matrix.push([]);
  }

  matrix[matrix.length - 1].push(item);  

  return matrix;
}, [])

console.log(matrix);

0voto

La manière la plus simple avec ES6 en utilisant Array.from()

const matrixify = (arr, size) => 
Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>  
arr.slice(i * size, i * size + size));
const list =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] ;
console.log(matrixify(list, 3));

0voto

Ron Erlih Points 21

Un autre coup de couteau,

  1. Création d'une matrice vide (tableau de tableaux de lignes)
  2. Iterating arr et l'affectation aux lignes correspondantes

    function arrayToMatrix(arr, wantedRows) { // create a empty matrix (wantedRows Array of Arrays] // with arr in scope return new Array(wantedRows).fill(arr) // replace with the next row from arr .map(() => arr.splice(0, wantedRows)) }

    // Initialize arr
    arr = new Array(16).fill(0).map((val, i) => i)
    
    // call!!
    console.log(arrayToMatrix(arr, 4));
    
    // Trying to make it nice
    const arrToMat = (arr, wantedRows) => new Array(wantedRows).fill(arr)
      .map(() => arr.splice(0, wantedRows))

(comme dans : celui-ci )

(et : celui-ci provient d'un autre fil de discussion )

MatArray La classe ?

L'extension d'un tableau pour l'ajouter à un prototype semble utile, mais elle nécessite quelques fonctionnalités pour compléter les méthodes du tableau. MatArray Classe ? aussi pour les tapis multidimensionnels et les aplatir, peut-être, peut-être pas..

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X