207 votes

(Deep) copier un tableau en utilisant jQuery

Double Possible:
Quel est le moyen le plus efficace pour cloner un objet JavaScript?

J'ai besoin de copier un (ordonné, pas associatif) tableau d'objets. Je suis à l'aide de jQuery. J'ai d'abord essayé

jquery.extend({}, myArray)

mais, naturellement, cela me redonne un objet, où j'ai besoin d'un tableau (vraiment l'amour de jquery.étendre, par la voie).

Alors, quel est le meilleur moyen pour copier un tableau?

278voto

Noah Sussman Points 2512

Depuis Le Tableau.slice() ne fait pas de profondeur de la copie, il n'est pas adapté pour les tableaux multidimensionnels:

var a =[[1], [2], [3]];
var b = a.slice();

b.shift().shift();
// a is now [[], [2], [3]]

Notez que bien que j'ai utilisé shift().shift() - dessus, le point est juste qu' b[0][0] contient un pointeur vers a[0][0] plutôt qu'une valeur.

De même, delete(b[0][0]) provoque également a[0][0] à être supprimé et b[0][0]=99 également de modifier la valeur de a[0][0] à 99.

jQuery extend méthode ne effectuer une copie en profondeur lorsque la valeur true est passé comme argument initial:

var a =[[1], [2], [3]];
var b = $.extend(true, [], a);

b.shift().shift();
// a is still [[1], [2], [3]]

29voto

geowa4 Points 17712

test = $.extend([], [['a', ['c']], 'b'])

Cela devrait le faire pour vous.

20voto

scunliffe Points 30964

La copie d'un tableau JS natif est facile. Utilisez la méthode Array.slice () qui crée une copie de tout / partie du tableau.

 var foo = ['a','b','c','d','e'];
var bar = foo.slice();
 

maintenant foo et bar sont 5 tableaux de membres de 'a', 'b', 'c', 'd', 'e'

bien sûr, la barre est une copie, pas une référence ... donc si vous avez fait cela ensuite ...

 bar.push('f');
alert('foo:' + foo.join(', '));
alert('bar:' + bar.join(', '));
 

vous auriez maintenant:

 foo:a, b, c, d, e
bar:a, b, c, d, e, f
 

7voto

frends Points 11

Si vous voulez utiliser du JavaScript pur, essayez ceci:

  var arr=["apple","ball","cat","dog"];
 var narr=[];

 for(var i=0;i<arr.length;i++){
     narr.push(arr[i]);
 }
 alert(narr); //output: apple,ball,vat,dog
 narr.push("elephant");
 alert(arr); // output: apple,ball,vat,dog
 alert(narr); // apple,ball,vat,dog,elephant
 

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