Maison > Article > interface Web > Combinez/fusionnez deux tableaux JS en utilisant différentes astuces METHOD_Javascript
Ceci est un article simple sur quelques conseils sur l'utilisation des tableaux JavaScript. Nous utiliserons différentes méthodes pour combiner/fusionner deux tableaux JS, et discuterons des avantages/inconvénients de chaque méthode.
Considérons d'abord la situation suivante :
Mais que se passe-t-il si a a 10 000 éléments et b a également 10 000 éléments ? C aura 20 000 éléments, donc l’utilisation de la mémoire de a et b doublera.
« Pas de problème ! », dites-vous. Laissez-les être ramassés, définissez A et B sur null, problème résolu !
a = b = null; // 'a' et 'b' sont recyclés
Haha. Pour les petits tableaux contenant seulement quelques éléments, cela ne pose aucun problème. Mais pour les grandes baies ou dans les systèmes avec une mémoire limitée qui doivent répéter ce processus fréquemment, il y a en fait beaucoup de marge d'amélioration.
Insertion de boucle
D'accord, copions le contenu d'un tableau dans un autre, en utilisant : Array#push(..)
Semble avoir une meilleure empreinte mémoire.
Mais que se passe-t-il si le tableau a est plus petit ? Pour des raisons de mémoire et de vitesse, vous souhaiterez peut-être mettre le plus petit a devant b. Pas de problème, remplacez simplement push(..) par unshift(..):
Cependant, la boucle for est effectivement moche et difficile à maintenir. Pouvons-nous faire mieux ?
C'est notre première tentative, en utilisant Array#reduce :
Que diriez-vous de ceci :
Limite de longueur maximale du tableau
Le premier problème majeur est que l'utilisation de la mémoire a doublé (temporairement bien sûr !) et ce qui est ajouté consiste essentiellement à copier des éléments dans la pile via des appels de fonction. De plus, différents moteurs JS ont des limites sur la longueur des données copiées.
Donc, si le tableau contient un million d'éléments, vous dépasserez certainement la limite de la pile d'appels autorisée pour push(...) ou unshift(...). Hélas, il fera du bon travail avec quelques milliers d'éléments, mais il faudra faire attention à ne pas dépasser des limites de longueur raisonnables.
Remarque : vous pouvez essayer splice(...), qui a le même problème que push(...) et unshift(...).
Il existe un moyen d'éviter cette limite de longueur maximale.