如何在 javascript 中创建 json 对象的副本而不是引用

how to create a copy of json object in javascript instead of a reference

我有 testdata.js 文件,其中 json 测试数据如下:

testdata.js 文件:

module.exports = 

{ 创建主机: {

        name : "System-001",
        description: "Creating System",

    }

}

在另一个测试中,我试图用上述测试数据创建一个名为 testcase1 的变量。更改 testcase1 中的 属性 值,更改 testdata.js 文件中的值 json 对象。

it("Create a host", function(){
var testcase1 = testdata.createHost;

testcase1.name="sys-002";

console.log(testcase1.name);
console.log(testdata.createHost.name);
});

回复: 系统-002 系统-002

我的要求是创建一个测试数据的副本而不是创建一个引用。我该怎么做?

您可以使用 for in 循环遍历每个属性并按值分配它们。

var createHost = { name : "System-001", description: "Creating System" }
var test = {};
for (var key in createHost)
 test[key] = createHost[key];
  
test.name = "Test";

console.log(test.name);
console.log(createHost.name);

您可以使用jQuery中的扩展函数克隆对象:

var testCaseClone = jQuery.extend({}, testdata);

没有 "JSON object" 这样的东西(除非你的字面意思是包含 parsestringify 函数的全局对象)。只有 JSON 个字符串。因此,您可以使用简单的 = 运算符复制它们。

var copy_json_string = original_json_string

如果您需要复制一个对象(它是 object,只是 object,而不是 "JSON object"),那里已经有几十个答案,例如:How do I correctly clone a JavaScript object?.

最短路线:

var copied = JSON.parse(JSON.stringify(object));