有没有办法添加/减去与另一个对象具有相同的字段的JSON内的所有字段?

我有一个Mongoose.js模式,看起来像这样:

{ "City": String, "Year": String, "Population": Number, "Blah": Number, "Nested": { "Something": Number, "More stuff": Number } } 

是否有一个方便/最好的方法来采取这些领域的两个对象,并添加他们的数字领域,还是我需要写一个function,真正进入和做到这一点?

我在这里处理一个非常大的模式。 如果我写一个函数来做到这一点,我将不得不手动维护它; 这意味着如果我改变架构,我将不得不手动改变我定义的成员函数来添加东西。

很简单。 这是一个通用的计算function,从schema1中减去schema2并返回一个新的对象。

它只是为了匹配相同级别的对象。 如果一个模式有一个属性,但另一个没有被忽略。

如果他们是数字和有效数字的schema1 – schema2

如果他们是对象,我们需要更深入。

在所有types的声明中,schema1是领先的,并假定schema2将会遵循。 在这种情况下,我的可怕的灾难和绝望会等待你。 testing所有你想要的types是由你自己决定的。 我只build立了一些安全措施。

 json1 = { City: "Amsterdam", Year: "2000", Population: 100, brutProduce: 10000, losses: { devalue: 10000, damages: 1000 } } json2 = { City: "Amsterdam", Year: "2003", Population: 100, brutProduce: 10000, losses: { devalue: 10000, damages: 1000 } } //Only cacluate number types function calculate(schema1,schema2) { var ret = {}; for (var key in schema1) { if (schema1.hasOwnProperty(key) && schema2.hasOwnProperty(key)) { var obj = schema1[key]; var obj2 = schema2[key] if(typeof obj === "number" && !isNaN(obj) && typeof obj2 === "number" && !isNaN(obj2)) { ret[key] = obj-obj2; } else { if(typeof obj === 'object' && typeof obj2 === 'object') { ret[key] = calculate(obj,obj2); } else { ret[key] = obj; } } } } return ret; } test = calculate(json1,json2); console.log(test); 
 Please check console for the output. thank you.