Javascript 为什么两个方向都不能应用JSON补丁?
我正在尝试实现一种合并JSON对象的方法,基于这些对象应用补丁 为此,我使用with。以下是我所拥有的:Javascript 为什么两个方向都不能应用JSON补丁?,javascript,json,node.js,Javascript,Json,Node.js,我正在尝试实现一种合并JSON对象的方法,基于这些对象应用补丁 为此,我使用with。以下是我所拥有的: #!/usr/bin/env node var jsonmergepatch = require('json-merge-patch'); var prettyjson = require('prettyjson'); var options = {keysColor: 'blue',dashColor: 'red',stringColor: 'green'}; var entry = {
#!/usr/bin/env node
var jsonmergepatch = require('json-merge-patch');
var prettyjson = require('prettyjson');
var options = {keysColor: 'blue',dashColor: 'red',stringColor: 'green'};
var entry = {
"leaf": {
"enabled": {
"type": {
"name": "string"
},
"id": "enabled",
"value": "123"
}
},
"id": "configuration"
};
var template = {
"leaf": {
"enabled": {
"type": {
"name": "string"
},
"id": "enabled",
"value": "_"
}
},
"id": "configuration"
};
var entryAppliedOnTemplate = jsonmergepatch.apply(template, entry);
var templateAppliedOnEntry = jsonmergepatch.apply(entry, template);
console.log("Entry Applied On Template:")
console.log(prettyjson.render(entryAppliedOnTemplate, options));
console.log("\nTemplate Applied On Entry:")
console.log(prettyjson.render(templateAppliedOnEntry, options));
哪些产出:
Entry Applied On Template:
leaf:
enabled:
type:
name: string
id: enabled
value: 123
id: configuration
Template Applied On Entry:
leaf:
enabled:
type:
name: string
id: enabled
value: 123
id: configuration
我不能理解的是,在这种情况下,输出是相等的,我认为我正确地期望它不是。我无法理解为什么我的输出不是这样:
Entry Applied On Template:
leaf:
enabled:
type:
name: string
id: enabled
value: 123
id: configuration
Template Applied On Entry:
leaf:
enabled:
type:
name: string
id: enabled
value: _
id: configuration
我现在可以用它生存下去,因为给出的输出实际上满足了我目前的需求。但是我在测试它时感到困惑,我想了解这里发生了什么,因为我可能会在将来遇到这种情况。我有时很笨,我会删除这个问题。但我会回答,因为我认为有人可能会犯同样愚蠢的错误 我刚刚注意到,jsonmergepatch.applysource,target不仅返回应用了补丁的对象,而且它实际上将补丁应用于实际对象并返回它。我希望它能克隆它或是别的什么