JS克隆对象并删除元素

时间:2014-12-03 02:19:33

标签: javascript

我疯了吗?

我正在尝试克隆一个对象,然后从中删除一个元素,但它也会从初始对象中删除。我觉得我不再理解生活!

var obj1 = { 
  'name' : 'bob',
  'hair' : 'brown'
}

var obj2 = obj1;
delete obj2.hair;

这个删除的obj1.hair。怎么样?什么?为什么呢?

3 个答案:

答案 0 :(得分:0)

var obj2 = obj1;不会克隆该对象。它只是使第二个变量指向完全相同的对象。在Javascript中,对象是通过引用(而不是通过副本)分配的。因此,两个变量都指向唯一的对象。

如果你真的想要克隆,那么你必须实际克隆。这不是Javascript语言内置的功能,但您可以构建克隆功能。那里有很多。

一些参考文献:

What is the most efficient way to deep clone an object in JavaScript?

How do I correctly clone a JavaScript object?

What is the most efficient way to deep clone an object in JavaScript?

How to Deep clone in javascript

答案 1 :(得分:0)

obj2obj1指的是同一个对象。您需要clonenew对具有相似值的对象的两个不同引用。

function Obj(name, hairColor){
    this.name = name;
    this.hair = hairColor;
};

var obj1 = new Obj('bob', 'brown');
var obj2 = new Obj('bob', 'brown');

delete obj2.hair;

Another alternative,如果定义如上所述的Obj函数,则不可行,就是编写一个循环于对象属性的函数,并返回一个具有相同值的新对象。 / p>

答案 2 :(得分:0)

function clone(obj) {
    if(obj == null || typeof(obj) != 'object')
        return obj;

    var temp = obj.constructor(); // changed

    for(var key in obj) {
        if(obj.hasOwnProperty(key)) {
            temp[key] = clone(obj[key]);
        }
    }
    return temp;
}

用法

var obj1 = { 
  'name' : 'bob',
  'hair' : 'brown'
}

var obj2 = clone(obj1);

所有信用都在这里https://stackoverflow.com/a/122190/1564365

(回答这个问题,我觉得很蠢。)