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);
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
.
arr = []; for (row of table) for (e of row) arr.push(e);
concat()
est trop lent dans ce cas de toute façon.
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.
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));
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); });
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))