NodeJS - 从函数返回对象会覆盖该对象先前的声明
NodeJS - Returning object from function overwrites previous declaration of that object
我的 main.js 中有对象:
var Status={
prop1:'',
prop2:'',
prop3:'',
prop4:''
};
然后我有一个函数(在另一个 .js 文件中)计算 prop2
、prop3
和 prop4
,如下所示:
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
并覆盖 prop2
、prop3
和 prop4
,但它会覆盖整个对象,所以在我之后运行 我最终得到:
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().
合并对象
我的 main.js 中有对象:
var Status={
prop1:'',
prop2:'',
prop3:'',
prop4:''
};
然后我有一个函数(在另一个 .js 文件中)计算 prop2
、prop3
和 prop4
,如下所示:
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
并覆盖 prop2
、prop3
和 prop4
,但它会覆盖整个对象,所以在我之后运行 我最终得到:
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().
合并对象