keslo
@keslo

Как копировать объект в JavaScript?

Добрый вечер, господа.
Всем известно, что в JS объект передается по ссылке, а не по значению. Подскажите, какие есть варианты для копирование объекта?
  • Вопрос задан
  • 15780 просмотров
Решения вопроса 2
@sanex3339
var cloneOfA = JSON.parse(JSON.stringify(a));
или
var copiedObject = jQuery.extend(true, {}, originalObject);


Почему я должен гуглить за вас?

Тут еще
stackoverflow.com/questions/728360/most-elegant-wa...
Ответ написан
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Object.clone = function clone(o, copyProto, copyNested){
   function Create(i){
        for(i in o){
          if(o.hasOwnProperty(i)) this[i] = ( copyNested && typeof o[i] == "object" ) 
             ? clone(o[i], true, true) : o[i];
        }
   }
   if(copyProto && "__proto__" in o) Create.prototype = o.__proto__; //IE затупит
   return new Create();
}


//o - Целевой объект
//copyProto - будет ли скопирован прототип объекта
//copyNested - будут ли клонированы объекты, вложенные в текущий или сохранятся в виде ссылок


var target = {
  "A" : {
       "Z" : 1,
       "X" : 2,
       "Y" : {
          "F" : 3,
          "G" : 4
       }
  }
};

target.__proto__.f = function(){};

var clone1 = Object.clone(target, false, true);
clone1.f //undefined
clone1.A == target.A //false

var clone2 = Object.clone(target, true);
clone2.f //function
clone2.A == target.A //true
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@mikhailrojo
Через Object.assign()
const old = {mi: 1, ti: 2} // копируемый объект
const new = Object.asign({}, old);// присваиваем пустому объекту свойства old
new ! == old;// true
Ответ написан
@vit134
а как Вам такой вариант? не уверен что он покрывает все возможные варианты, но объект копирует без сохранения ссылки
const deepClone = (obj) => {
    let clone = {};
    for (let prop in obj) {
        if (typeof obj[prop] === 'object') {
            clone[prop] = deepClone(obj[prop]);
        } else {
            clone[prop] = obj[prop];
        }
    }

    return clone;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы