javascript - 如何创建重复对象

标签 javascript object underscore.js

我有一个带有嵌套对象对象,如下所示。

var g = {
    "steps": [{
        "location": [{
            "a": "1"
        }, {
            "a": "2"
        }]
    }]
};

我使用Object创建了重复的对象,如下所示。

var h=Object.create(g);

问题是,如果我修改 h 中的任何内容,g 也会反射(reflect)出来。我怎样才能防止这种情况。我尝试使用 underscore 函数(克隆)。

修改:

  h["steps"][0]["location"][0]["a"]="3"

修改后:

g 看起来像

enter image description here

h 看起来像

enter image description here

即使我修改了 h 中的任何内容,g 也不应该被反射(reflect)。

谁能帮帮我。

谢谢。

最佳答案

根据 _.clone文档,

Create a shallow-copied clone of the object. Any nested objects or arrays will be copied by reference, not duplicated.

浅复制对象往往会显示您现在实际遇到的问题。如果您使用的对象没有附加任何方法/变量,您可以执行此操作

var h = JSON.parse(JSON.stringify(g));

这会进行深度复制。

注意:如果对象具有循环引用,则使用 this answer 中描述的技术。

关于javascript - 如何创建重复对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22555959/

相关文章:

Javascript:使用 "for"遍历 2 级深度数组不会产生另一个数组

javascript - 了解使用 'Object.create()' 而不是 'new' 关键字创建原型(prototype)对象

javascript - 下划线数组理解?

Javascript 下划线总是返回 false

javascript - ng-if 指令 : What's the issue here?

javascript - JQuery Append to SELECT 不起作用?

php - 判断对象是否在静态方法中实例化?

javascript - 基于其他数组过滤集合(对象数组)

javascript - 我想将单击事件绑定(bind)到 xpages type-ahead 中的 li 元素

javascript - 如何验证 einaros 的 ws websocket 包上的原始 url