Cloner un objet en JavaScript

Bonjour,

S’il vous plait, comment je peux cloner un objet en JavaScript?

Merci.

Si vous n’avez que des propriétés et pas de fonctions dans votre objet, vous pouvez simplement utiliser :

var newObj = JSON.parse(JSON.stringify(yourObj));

Voici un exemple:

var yourObj = { 
  a: 1,
  b: { 
    c: 2
  }
}
var newObj = JSON.parse(JSON.stringify(yourObj));
yourObj.b.c = 3;
console.log(yourObj); // { a: 1, b: { c: 3 } }
console.log(newObj); // { a: 1, b: { c: 2 } } 

Voici la fonction que j’utilise pour cloner un objet en JavaScript.

function clone(obj) {
    var copie = {};
    for(var i in obj) {
        if(typeof(obj[i])=="object" && obj[i] != null)
            copie[i] = clone(obj[i]);
        else
            copie[i] = obj[i];
    }
    return copie;
}

Si vous utilisez la bibliothèque Underscore.js, tu peux utiliser la méthode clone().

var newObj = _.clone(yourObj);

Voici un exemple simple:

var yourObj = { 
  a: 1,
  b: 2
}

var newObj = _.clone(yourObj);
yourObj.b = 8;
console.log(yourObj); // { a: 1, b: 8 }
console.log(newObj); // { a: 1, b: 2 }  

La méthode Object.assign fait partie de la norme ECMAScript 2015 (ES6) et fait exactement ce dont vous avez besoin.

var newObj = Object.assign({}, yourObj);

Exemple:

var yourObj = { 
  a: 1,
  b: { 
    c: 6
  }
}

var newObj = Object.assign({}, yourObj);
yourObj.b.c = 7;
console.log(yourObj); // {a: 1, b: {c: 7}}
console.log(newObj); //  {a: 1, b: {c: 7}} Modification à aussi impacter le newObj

Voir aussi: