Convertissez un tableau 2D JavaScript en un tableau 1D

Je veux convertir un tableau 2D JavaScript en un tableau 1D, de sorte que chaque élément du tableau 2D sera concaténé dans un seul tableau 1D.

Ici, j'essaie de convertir arrToConvert en un tableau 1D.

 var arrToConvert = [[0,0,1],[2,3,3],[4,4,5]]; console.log(get1DArray(arrToConvert)); //print the converted array function get1DArray(2dArr){ //concatenate each element of the input into a 1D array, and return the output //what would be the best way to implement this function? } 

Essayez .concat() :

 var arrToConvert = [[0,0,1],[2,3,3],[4,4,5]]; var newArr = []; for(var i = 0; i < arrToConvert.length; i++) { newArr = newArr.concat(arrToConvert[i]); } console.log(newArr); 

Utiliser ES6 Spread Operator

 arr1d = [].concat(...arr2d); 

Notez que cette méthode ne fonctionne que si arr2d a moins d'environ 100 000 sous-réseaux. Si votre tableau devient plus grand que celui-ci, vous obtiendrez un RangeError: too many function arguments .

Pour> 100 000 lignes

 arr = []; for (row of table) for (e of row) arr.push(e); 

concat() est trop lent dans ce cas de toute façon.

The Underscore.js way

Cela réduira de manière récursive les tableaux de toute profondeur (devrait également fonctionner pour les grands tableaux):

 arr1d = _.flatten(arr2d); 

Si vous voulez seulement l'aplatir à un seul niveau, passez en tant que deuxième argument.

Un moyen court <ES6

 arr1d = [].concat.apply([], arr2d); 

De la même manière que l'opérateur de propagation func.apply(thisArg, [argsArray]) décompresse un ensemble d'arguments (2ème paramètre) et les utilise pour appeler func dans ce cas concat .

par exemple:

 [].concat.apply([1], [[2], [3, 4]) ~> [1].concat([2], [3, 4]) ~> [1, 2, 3, 4] 

Que diriez-vous:

 var arrToConvert = [[0,0,1],[2,3,3],[4,4,5]]; function get1DArray(arr){ return arr.join().split(","); } console.log(get1DArray(arrToConvert)); 

http://jsfiddle.net/JRR4J/

 var arrToConvert = [[0,0,1],[2,3,3],[4,4,5]]; var modifiedArray = arrToConvert.map(function(convArray){ return array[0]+array[1]+array[2]; }); 

Un autre exemple

 var passengers = [ ["Thomas", "Meeks"], ["Gregg", "Pollack"], ["Christine", "Wong"], ["Dan", "McGaw"] ]; var modifiedNames = passengers.map(function(convArray){ return convArray[0]+" "+convArray[1]; }); 

Essayez .reduce()

 var test2d = [ ["foo", "bar"], ["baz", "biz"] ]; var merged = test2d.reduce(function(prev, next) { return prev.concat(next); }); 

Source : http://jsperf.com/2-dimensional-array-merge

 var arrToConvert = [[0, 0, 1], [2, 3, 3], [4, 4, 5]]; function get1DArray(arr){ var result = new Array(); for (var x = 0; x < arr.length; x++){ for (var y = 0; y < arr[x].length; y++){ result.push(arr[x][y]) } } return result } alert (get1DArray(arrToConvert)) 

http://jsfiddle.net/Saturnix/ReeqQ/