Javascript 为什么两个方向都不能应用JSON补丁?

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 = {

我正在尝试实现一种合并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 = {
  "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不仅返回应用了补丁的对象,而且它实际上将补丁应用于实际对象并返回它。我希望它能克隆它或是别的什么