Le parcours d’un objet pour le copier peut se faire facilement via un for in exemple:
var a = {
b:"a",
c:"e"
}
var copie = {};
for(var i in a){
copie[i] = a[i]
}
le problème est que le for in parcours aussi les propriétés hérités et donc les méthodes. Si on voulais ne par copier les propriétés hérités cela donnerait
for(var i in a){
if(a.hasOwnProperty(i)){
copie[i] = a[i]
}
}
mais là les performances sont encore plus mauvaises.
Une solution est d’utiliser Object.keys (ie9+) pour récupérer les clef de l’objet.
var keys = Object.keys(obj);
var lg = keys.length
for (var i = 0; i < lg; i++){
var o = keys[i];
copie[o] = a[o];
}
ça risque d'être un peu long à chaque fois de réécrire tout ça faisons en une fonction:
var forOf =function(obj, func){
var keys = Object.keys(obj);
var lg = keys.length
for (var i = 0; i < lg; i++){
var o = keys[i];
func(obj[o], o, obj);
}
}
et l'appel pour la copie par exemple
forOf(a,function(obj,i){
copie[i]=obj;
})
Si la fonction s'appelle for of c'est car les vrai navigateurs supporte cette propriété https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...of
l'utilisation de cette fonction pour les boucles va vous permettre d'optimiser vos performances par deux https://jsperf.com/object-keys-iteration/20 sauf sur ie apparemment en ne testant pas que l'objet est pas hérité ou on perd quelques pourcentages négligeables.