Quelle est la manière la plus efficace de concaténer des tableaux N d'objets en JavaScript?
Les tableaux sont modifiables et le résultat peut être stocké dans l'un des tableaux d'entrée.
javascript
arrays
Leonid
la source
la source
Réponses:
Si vous concaténez plus de deux baies,
concat()
c'est la voie à suivre pour plus de commodité et des performances probables.Pour concaténer seulement deux tableaux, le fait d'
push
accepter plusieurs arguments constitués d'éléments à ajouter au tableau peut être utilisé à la place pour ajouter des éléments d'un tableau à la fin d'un autre sans produire un nouveau tableau. Avecslice()
elle peut aussi être utilisé à la place ,concat()
mais il semble y avoir aucun avantage de performance de le faire .Dans ECMAScript 2015 et versions ultérieures, cela peut être encore réduit
Cependant, il semble que pour les grands tableaux (de l'ordre de 100 000 membres ou plus), la technique passant un tableau d'éléments à
push
(soit en utilisantapply()
l'opérateur de propagation ECMAScript 2015) peut échouer. Pour de tels tableaux, l'utilisation d'une boucle est une meilleure approche. Voir https://stackoverflow.com/a/17368101/96100 pour plus de détails.la source
a.concat(b)
cas de test semble faire inutilement une copie du tableaua
puis le jeter.concat()
généralement plus rapide. Dans le cas de la concaténation d'un tableau sur un tableau existant en place,push()
c'est la voie à suivre. J'ai mis à jour ma réponse.edit : preuve d'efficacité: http://jsperf.com/multi-array-concat/7
edit2 : Tim Supinie mentionne dans les commentaires que cela peut entraîner un dépassement de la taille de la pile d'appels par l'interpréteur. Cela dépend peut-être du moteur js, mais j'ai également obtenu "Taille maximale de la pile d'appels dépassée" sur Chrome au moins. Cas de test:
[].concat.apply([], Array(300000).fill().map(_=>[1,2,3]))
. (J'ai également eu la même erreur en utilisant la réponse actuellement acceptée, donc on anticipe de tels cas d'utilisation ou on construit une bibliothèque pour d'autres, des tests spéciaux peuvent être nécessaires quelle que soit la solution que vous choisissez.)la source
Pour les personnes utilisant ES2015 (ES6)
Vous pouvez maintenant utiliser la syntaxe Spread pour concaténer des tableaux:
la source
La
concat()
méthode est utilisée pour joindre deux ou plusieurs tableaux. Il ne modifie pas les tableaux existants, il ne renvoie qu'une copie des tableaux joints.la source
concat
est spécifiquement utilisé pour créer de nouveaux tableaux sans muter le tableau d'origine. Si vous souhaitez mettre à jourarray1
, vous devez utiliserarray1.push(...array2, ...array3, ...array4)
Utilisez Array.prototype.concat.apply pour gérer la concaténation de plusieurs tableaux:
Exemple:
la source
Si vous êtes en train de passer le résultat par carte / filtre / tri, etc. et que vous souhaitez concaténer un tableau de tableaux, vous pouvez utiliser
reduce
la source
Pour un tableau de plusieurs baies et ES6, utilisez
Par exemple:
la source
newArr = Array.from(new Set(newArr));
.any[]
? La dactylographie est là - bizarre.[].concat.apply([], ...arr)
fonctionne bien mieux sur de gros volumes.Maintenant, nous pouvons combiner plusieurs tableaux en utilisant
ES6
Spread
. Au lieu d'utiliserconcat()
pour concaténer des tableaux, essayez d'utiliser la syntaxe d'étalement pour combiner plusieurs tableaux en un seul tableau aplati. par exemple:la source
résolu comme ça.
la source
Vous pouvez utiliser le site jsperf.com pour comparer les performances. Voici le lien pour concat .
Ajout d'une comparaison entre:
et:
Le second est presque 10 fois plus lent en chrome.
la source
push.apply()
, ce qui semble être plus rapide queconcat()
dans tous les navigateurs sauf Chrome. Voir ma réponse.Facilement avec la fonction concat:
la source
Voici une fonction par laquelle vous pouvez concaténer plusieurs nombres de tableaux
Exemple -
affichera
la source
Fusionner un tableau avec Push:
Utilisation de l' opérateur Concat et Spread:
la source
Si vous disposez d'un tableau de tableaux et que vous souhaitez concaténer les éléments en un seul tableau, essayez le code suivant (nécessite ES2015):
Ou si vous aimez la programmation fonctionnelle
Ou encore mieux avec la syntaxe ES5, sans l'opérateur de propagation
Cette façon est pratique si vous ne connaissez pas le non. des tableaux au moment du code.
la source
Raccourcissez avec ES6.
Cela concatène et unique les tableaux multiples;
Démo sur codepen
la source
new Set()
ne supprime pas les éléments en double. Retirez-le.[].concat(...Array)
où 'n' est un certain nombre de tableaux, peut-être un tableau de tableaux. . .
var answer = _.reduce (n, fonction (a, b) {return a.concat (b)})
la source
S'il n'y a que deux tableaux à concaténer et que vous devez réellement ajouter l' un des tableaux plutôt que d'en créer un nouveau, pousser ou boucler est la solution.
Référence: https://jsperf.com/concat-small-arrays-vs-push-vs-loop/
la source
essaye ça:
la source
si les tableaux N proviennent de la base de données et ne sont pas codés en dur, je le ferai comme ceci en utilisant ES6
la source