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?
Réponses
Trop de publicités?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]]
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
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