2017-08-29 2 views
0

Quelle est la meilleure façon de concaténer des tableaux de manière mutante dans JS? Mon problème:Comment concaténer des tableaux dans JS de manière mutante?

var a = [1,2,3] 
var b = a; 
a = a.concat([4,5,6]) //<-- typical way of array concatenation in JS 
console.log(a) //[1,2,3,4,5,6] 
console.log(b) //[1,2,3] <-- I'd like it to be the same like a here 

je peux utiliser une boucle bien sûr, mais je me demande s'il y a un moyen plus rapide et plus propre pour y parvenir.

Répondre

0

Vous pouvez garder « un » comme une propriété afin qu'il puisse être consulté par référence:

var myObj = {}; 
myObj.a = [1,2,3] 
var b = myObj; 
myObj.a = myObj.a.concat([4,5,6]) 

console.log(myObj.a); 
console.log(b.a); 
1

push mute un tableau, mais il attend séquence d'arguments, nous utilisons donc apply:

var a = [1,2,3] 
var b = a 
a.push.apply(a, [4,5,6]) 
console.log(a) //=> [1, 2, 3, 4, 5, 6] 
console.log(b) //=> [1, 2, 3, 4, 5, 6] 

en ES6, vous pouvez utiliser l'opérateur de diffusion ...:

a.push(...[4, 5, 6]) 
0

Vous pouvez utiliser le fait que push peut prendre un nombre variable d'arguments, et les poussera tous à la fin du tableau. Vous pouvez alors écrire:

a.push.apply(a, [1, 2, 3]); 

Comme apply transformera un tableau d'arguments dans une liste d'arguments pour la fonction.

0

Vous pouvez utiliser push.apply ici pour mettre à jour a sans créer une nouvelle variable:

a.push.apply(a, [4,5,6]); 

Ou peut-être plus facile à comprendre:

Array.prototype.push.apply(a, [4,5,6]); 

DEMO

En bref apply appelle une fonction push avec le premier argument défini comme this (contexte d'objet), et le second argument un tableau. C'est équivalent à a.push(element1, ..., element10), par exemple.