Les éléments suivants dans une console JavaScript: rendements: p> objet foo = [1] code> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> P> Je veux effectuer une copie en fonction de la valeur B de chaque tableau pour chaque clé d'un. Y a-t-il un moyen plus facile? P> P>
4 Réponses :
moyen plus facile: sortie est identique. p> EDIT: P> var a = {'foo': []};
var b = {};
for (var key in a) {
if (a.hasOwnProperty(key)) {
b[key] = [];
for (var i = 0; i < a[key].length; i += 1) {
b[key][i] = a[key][i];
}
}
}
a['foo'].push(1);
console.log(b);
Anatoliy: Je ne veux pas que B soit simplement une référence à un; Je veux que B soit une copie unique en fonction de la valeur des tableaux stockés dans un de sorte que lorsque j'appuie sur les tableaux de A's n'a aucune incidence sur b.
Fixé. Actuellement, la sortie est un objet avec une matrice vide.
Vous pouvez simplifier tout ce type de copie profonde avec une [clé] .slice (0) code>.
Vous pouvez créer une fonction " clone em>" qui crée un objet nouvel objet em> basé sur l'objet original em> objet Constructeur , puis clone que Original em> propriétés d'objet est également si elles sont des objets:
J'ai couru sur ce problème auparavant, et c'est exactement comment je l'ai résolu. +1
Le prototypage rompt ceci. Tout simplement objet.prototype.foo = fonction () {}; code> créera une récursion infinie.
@Jonathan: a ajouté une déclaration si elle va arrêter la récursion.
Même problème ici CMS: obj.constructor () code> va mourir sur les fonctions constructrices (
Temp code> sera
non défini code>) et potentiellement des globaux de clobber.
@Crescent: Exactement, le même problème !, Ajout de l'opérateur Nouveau code> pendant que je pense à quelque chose de mieux ...
Comme cela ajoutera une prise en charge des tableaux de copie approfondis dans votre code:
Comment obtenez-vous une "console JavaScript"?
Oscar - Utilisation de Firebug dans Firefox, ou Inspecteur Web Safari.
@Oscar: Vous avez besoin de Firebug pour
console.log code> fonctionner pour fonctionner.