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



我的主对象.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'
};

如何使其仅覆盖具有相同名称的属性而保留其他属性?谢谢。

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

您有三种选择:

a.a. 将Status对象传递给CalculateProperties并对其进行更新。

b. 将其分配给新变量 比如CalculatedValues并将相关属性复制到Status

c. 使用 Object.assign(( 或 lodash.merge(( 合并对象。

你应该使用 Object.assign 合并你的对象

Status = Object.assign(Status, CalculateProperties());

ES6 模拟

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

最新更新