我的主对象.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'
};
如何使其仅覆盖具有相同名称的属性而保留其他属性?谢谢。
您正在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()}