NodeJS - 从函数返回对象会覆盖该对象先前的声明

NodeJS - Returning object from function overwrites previous declaration of that object

我的 main.js 中有对象:

var Status={
   prop1:'',
   prop2:'',
   prop3:'',
   prop4:''
};

然后我有一个函数(在另一个 .js 文件中)计算 prop2prop3prop4,如下所示:

function CalculateProperties() {
   var returnToMain={
      prop2:'',    //note that props in returnToMain have same names as in Status
      prop3:'',
      prop4:''
       };
   returnToMain.prop2=**some_calculations**;
   returnToMain.prop3=**some_calculations**;
   returnToMain.prop4=**some_calculations**;

   return returnToMain;

}

module.exports = CalculateProperties;

来自main.js 我是这样称呼它的:

Status = CalculateProperties();

我希望它单独留下 prop1 并覆盖 prop2prop3prop4,但它会覆盖整个对象,所以在我之后运行 我最终得到:

Status={
   prop2: 'Calculated_Value',
   prop3: 'Calculated_Value',
   prop4: 'Calculated_Value'
};

而不是:

Status={
   prop1: 'Original_Value',
   prop2: 'Calculated_Value',
   prop3: 'Calculated_Value',
   prop4: 'Calculated_Value'
};

我如何才能让它只覆盖同名的属性而不影响其他属性?谢谢。

您应该使用 Object.assign

合并您的对象
Status = Object.assign(Status, CalculateProperties());

es6 模拟

Status = {...Status, ...CalculateProperties()} 

您正在 CalculateProperties 中创建一个新对象并将其返回。 在您的 main.js 中,您将此返回值分配给 Status 这是一个不同的对象。 因此,现在 Status 指向不知道任何旧属性的新对象。

您有三个选择:

一个。将 Status 对象传递给 CalculateProperties 并更新它。

b。将它分配给新变量说 CalculatedValues 并将相关属性复制到 Status

c。使用 Object.assign() or lodash.merge().

合并对象