javascript - 将对象属性复制到新对象 - 不通过引用

标签 javascript jquery

我有一个 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 ;
};

最佳答案

如果你的对象足够简单并且JSON-compatible (即仅包含对象、数组和基元,没有 DOM 引用、没有 Regex 对象、没有循环引用等),最简单的克隆方法是:

var clone = JSON.parse(JSON.stringify(original));

否则,您将需要一个深层复制函数,如 this answer 中的函数。 *:

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;
}

* 小心!该问题的公认答案是仅 jQuery 的解决方案,并且被严重高估了!

关于javascript - 将对象属性复制到新对象 - 不通过引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14539746/

相关文章:

jquery - 在 e.keycode == 9(制表符)上,添加 12 个空格,并防止默认行为

php - 为 AJAX Post 抓取正确的变量 - 从 HTML/PHP 页面

javascript - 如何获取客户端计算机的 MAC 地址或机器标识符

php - 使用Json时,Ajax中的成功功能不起作用

jquery - 在 jQuery 中获取 CSS 规则的百分比值

javascript - 根据所选值更改文本区域内容

javascript - 元素经过后随页面滚动

javascript - 如何使用 Google Chrome for Youtube 运行扩展程序?

javascript - 如何锁定滚动以仅在 HTML 中朝一个方向移动

javascript - 如何禁用 <img> 标签的第三方 cookie?