1555 votes

Fusion/aplatir un tableau de tableaux en JavaScript ?

J'ai un tableau javascript comme

 [["$6"], ["$12"], ["$25"], ["$25"], ["$18"], ["$22"], ["$10"], ["$0"], ["$15"],["$3"], ["$75"], ["$5"], ["$100"], ["$7"], ["$3"], ["$75"], ["$5"]]
 

Comment pourrais-je faire cela juste

 ["$6", "$12", "$25", ...]
 

2564voto

Gumbo Points 279147

Vous pouvez utiliser concat pour fusionner des tableaux:

 var arrays = [["$6"], ["$12"], ["$25"], ["$25"], ["$18"], ["$22"], ["$10"], ["$0"], ["$15"],["$3"], ["$75"], ["$5"], ["$100"], ["$7"], ["$3"], ["$75"], ["$5"]];
var merged = [];
merged = merged.concat.apply(merged, arrays);
 

L'utilisation de la méthode apply de concat prend simplement le second paramètre en tant que tableau, donc la dernière ligne est identique à ceci:

 merged.concat(["$6"], ["$12"], …, ["$75"], ["$5"]);
 

613voto

Noah Freitas Points 3640

Voici une courte fonction qui utilise certaines des méthodes de tableau JavaScript les plus récentes pour aplatir un tableau à n dimensions.

 var flatten = function flatten(arr) {
  return arr.reduce(function (flat, toFlatten) {
    // See if this index is an array that itself needs to be flattened.
    if (toFlatten.some(Array.isArray)) {
      return flat.concat(flatten(toFlatten));
    // Otherwise just add the current index to the end of the flattened array.
    } else {
      return flat.concat(toFlatten);
    }
  }, []);
};
 

Usage:

 flatten([[1, 2, 3], [4, 5]]); // [1, 2, 3, 4, 5]
flatten([[[1, [1.1]], 2, 3], [4, 5]]); // [1, 1.1, 2, 3, 4, 5]
 

359voto

Nikita Volkov Points 19844

Voici une solution fonctionnelle simple et performante:

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

Pas de gâchis impératif.

246voto

user2668376 Points 261

Il peut être mieux fait par javascript réduire la fonction.

 var arrays = [["$6"], ["$12"], ["$25"], ["$25"], ["$18"], ["$22"], ["$10"], ["$0"], ["$15"],["$3"], ["$75"], ["$5"], ["$100"], ["$7"], ["$3"], ["$75"], ["$5"]];

arrays = arrays.reduce(function(a, b){
     return a.concat(b);
});
 

js-violon

Mozilla docs

33voto

Trindaz Points 2353

Une solution pour le cas plus général, lorsque vous pouvez avoir des éléments non-array dans votre tableau.

 function flattenArrayOfArrays(a, r){
    if(!r){ r = []}
    for(var i=0; i<a.length; i++){
        if(a[i].constructor == Array){
            flattenArrayOfArrays(a[i], r);
        }else{
            r.push(a[i]);
        }
    }
    return r;
}
 

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