Javascript 将对象特性复制到新对象并删除新对象(不是通过引用)

Javascript 将对象特性复制到新对象并删除新对象(不是通过引用),javascript,jquery,Javascript,Jquery,我有一个Javascript对象数组,它是用一些值初始化的。 我想将这些值复制到新的对象数组中,但不引用原始数组。 然后我想按照我的意愿操纵新对象 我尝试了与此示例代码类似的objectOptions.concat(),但随后它也删除了引用的原始对象: var objectOptions = [{option1: 'value1', someOption: 'value2'}]; function objectClean(){ var newObjectOptions = object

我有一个Javascript对象数组,它是用一些值初始化的。 我想将这些值复制到新的对象数组中,但不引用原始数组。 然后我想按照我的意愿操纵新对象

我尝试了与此示例代码类似的
objectOptions.concat()
,但随后它也删除了引用的原始对象:

var objectOptions = [{option1: 'value1', someOption: 'value2'}];

function objectClean(){
    var newObjectOptions = objectOptions.concat();
    for(var i in newObjectOptions )
    {
        delete newObjectOptions[i]['someOption'];
    }
    return newObjectOptions ;

};

如果对象足够简单且(即仅包含对象、数组和基本体、无DOM引用、无正则表达式对象、无循环引用等),则最简单的克隆方法是:

var clone = JSON.parse(JSON.stringify(original));
否则,您将需要一个深度复制函数,如*:


*小心!对这个问题的公认答案是一个只使用jQuery的解决方案,而且被严重高估了

如果对象足够简单且(即仅包含对象、数组和基本体、无DOM引用、无正则表达式对象、无循环引用等),则最简单的克隆方法是:

var clone = JSON.parse(JSON.stringify(original));
否则,您将需要一个深度复制函数,如*:



*小心!对这个问题的公认答案是一个只使用jQuery的解决方案,而且被严重高估了

谢谢大家!!我没有想到jQuery,我在尝试原生Javascript方法。它可以关闭。什么??不,不要使用jQuery!在你发布的问题的公认答案中,它说在哪里使用jQuery。我试过了,它很适合我想做的事情。这个答案是由jQuery的创建者写的,是的,如果您使用jQuery,它就可以工作。但是仅仅为了这个而使用jQuery是胡说八道(我想这就是@Nile的意思)。这个问题和答案如此流行,这是很可怕的,因为人们会被误导,认为他们需要jQuery来克隆对象。不幸的是,有很多问题都是重复的,谢谢!我没有想到jQuery,我在尝试原生Javascript方法。它可以关闭。什么??不,不要使用jQuery!在你发布的问题的公认答案中,它说在哪里使用jQuery。我试过了,它很适合我想做的事情。这个答案是由jQuery的创建者写的,是的,如果您使用jQuery,它就可以工作。但是仅仅为了这个而使用jQuery是胡说八道(我想这就是@Nile的意思)。这个问题和答案如此流行,这是很可怕的,因为人们会被误导,认为他们需要jQuery来克隆对象。不幸的是,有很多问题都是重复的。问一个问题,不要在评论中喋喋不休。提问者解释什么是concat吗?你的答案是理论性的,直到你能够通过解释它是如何工作的来证明它是正确的。你研究过信号旗系统吗?我有证据表明我可以对你的答案投赞成票和反对票。但当我用正确的答案解释时,我可以确信我会得到赞成票吗:这意味着你同意,新来者在这里很难成长,仅仅是因为有人不能用那只巨大的鼠标点击“赞成票”按钮,不要在评论中喋喋不休提问者能否解释什么是concat?你的答案是理论性的,直到你能够通过解释它是如何工作的来证明它是正确的。你研究过信号旗系统吗?我有证据表明我可以对你的答案投赞成票和反对票。但当我用正确的答案解释时,我可以确信我会得到赞成票:这意味着你同意,新来者很难在这里成长,仅仅是因为有人不能用那只巨大的鼠标点击“赞成票”按钮。
function clone(obj){
    if(obj == null || typeof(obj) != 'object')
        return obj;

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

    for(var key in obj)
        temp[key] = clone(obj[key]);
    return temp;
}