Javascript 洛达斯。智能按关键点合并两个对象
我有两个物体。A和B A B 如何循环A关键点,将其与B对象进行比较,并通过Lodash更新A对象中现有关键点的值?也许有什么好办法?我试着使用assing,但看起来我还不明白它是如何工作的 结果应该如下所示:Javascript 洛达斯。智能按关键点合并两个对象,javascript,lodash,Javascript,Lodash,我有两个物体。A和B A B 如何循环A关键点,将其与B对象进行比较,并通过Lodash更新A对象中现有关键点的值?也许有什么好办法?我试着使用assing,但看起来我还不明白它是如何工作的 结果应该如下所示: { "beta" : { "value": 5, "error" : null }, "hamma" : { "value": 2, "error" : null }, "zerta" : { "value"
{
"beta" : {
"value": 5,
"error" : null
},
"hamma" : {
"value": 2,
"error" : null
},
"zerta" : {
"value": null,
"error" : null
},
"mozes" : 5
}
谢谢你提供的任何信息
我已经通过原生js解决了这个问题,但我想知道如何通过Lodash解决这个问题
export function mapServerModelToStateValues(state, serverModel) {
let updatedState = {};
const serverModelKeyList = Object.keys(serverModel);
Object.keys(state).forEach(stateKey => {
serverModelKeyList.forEach(modelKey => {
if ( modelKey === stateKey ) {
updatedState[ stateKey ] = {
...state[ stateKey ],
value : serverModel[ modelKey ]
}
}
});
});
console.log(updatedState);
}
您可以使用u.mergeWith lodash方法并传递自定义函数
var a={beta:{value:null,error:null},hamma:{value:null,error:null},zerta:{value:null,error:null},mozes:5}
var b={beta:5,hamma:2,mozes:123}
_.合并A、b、功能值、b值{
_.isPlainObjectaValue?aValue.value=b值:aValue=b值
回程票
}
控制台loga
您可以使用u.mergeWith lodash方法并传递自定义函数
var a={beta:{value:null,error:null},hamma:{value:null,error:null},zerta:{value:null,error:null},mozes:5}
var b={beta:5,hamma:2,mozes:123}
_.合并A、b、功能值、b值{
_.isPlainObjectaValue?aValue.value=b值:aValue=b值
回程票
}
控制台loga
这样就可以了,请注意,结果中的所有键都具有相同的值,即错误格式 常数A={ 测试版:{ 值:null, 错误:null }, 哈马:{ 值:null, 错误:null }, 泽塔:{ 值:null, 错误:null }, 莫兹:5 } 常数B={ 贝塔:5, 哈马:2 } 常量C=uu.mapValuesA,值,键=>{ 返回{ 价值 值:B[键]| | value.value } }; 控制台.logC
这样就可以了,请注意,结果中的所有键都具有相同的值,即错误格式 常数A={ 测试版:{ 值:null, 错误:null }, 哈马:{ 值:null, 错误:null }, 泽塔:{ 值:null, 错误:null }, 莫兹:5 } 常数B={ 贝塔:5, 哈马:2 } 常量C=uu.mapValuesA,值,键=>{ 返回{ 价值 值:B[键]| | value.value } }; 控制台.logC
下面是一个迭代B数组并用于更新值的解决方案:
_.each(updates, (value, key) => _.set(data, `${key}.value`, value))
下面是一个迭代B数组并用于更新值的解决方案:
_.each(updates, (value, key) => _.set(data, `${key}.value`, value))
通过第二个对象的_键进行映射,以相应地更新第一个对象:
//obj a
常数a={
测试版:{
值:null,
错误:null
},
哈马:{
值:null,
错误:null
},
泽塔:{
值:null,
错误:null
},
莫兹:5
};
//obj b
常数b={
贝塔:5,
哈马:2
};
//映射“obj b”键并相应更新“obj a”
_.keysb.mapkey=>{
a[key].value=b[key];
};
//将obj a记录到控制台
console.loga;
通过第二个对象的_键进行映射,以相应地更新第一个对象:
//obj a
常数a={
测试版:{
值:null,
错误:null
},
哈马:{
值:null,
错误:null
},
泽塔:{
值:null,
错误:null
},
莫兹:5
};
//obj b
常数b={
贝塔:5,
哈马:2
};
//映射“obj b”键并相应更新“obj a”
_.keysb.mapkey=>{
a[key].value=b[key];
};
//将obj a记录到控制台
console.loga;
您可以使用和来实现这一点
var result = _.merge({}, a, _.mapValues(b, value => ({ value })));
变量a={
测试版:{
值:null,
错误:null
},
哈马:{
值:null,
错误:null
},
泽塔:{
值:null,
错误:null
},
莫兹:5
};
变量b={
贝塔:5,
哈马:2
};
var result=..merge{},a,..mapValuesb,value=>{value};
console.logresult;
.as控制台包装{最小高度:100%;顶部:0;}
您可以使用和来实现这一点
var result = _.merge({}, a, _.mapValues(b, value => ({ value })));
变量a={
测试版:{
值:null,
错误:null
},
哈马:{
值:null,
错误:null
},
泽塔:{
值:null,
错误:null
},
莫兹:5
};
变量b={
贝塔:5,
哈马:2
};
var result=..merge{},a,..mapValuesb,value=>{value};
console.logresult;
.as控制台包装{最小高度:100%;顶部:0;}
如果b包含一个mozes键怎么办?非常好,尽管我觉得三元可能会出现一些错误:如果b包含一个mozes键怎么办?非常好,尽管我觉得三元可能会出现一些错误:喜欢这一个,但是如果b值像0一样错误,会发生什么?你总是可以优化条件b[键]| | value.value取决于您的用例-您支持虚假值吗?我会使用hasOwnProperty检查,而不是这不起作用。运行时,它会将mozes.value设置为undefined,即使在源对象中它被设置为5。我喜欢这一个,但是如果B值像0一样错误,会发生什么?根据您的用例,您总是可以优化条件B[key]| | value.value-您支持错误值吗?我会使用hasOwnProperty检查,而不是这不起作用。运行时,它会将mozes.value设置为未定义,即使在源对象中将其设置为5。您知道Lodash完全是用JS编写的吗?如果你能用它
为什么要麻烦引入另一个库来完成同样的事情呢?是的,我知道,很明显。但我想知道如何通过使用Lodash解决这个问题。你知道Lodash完全是用JS编写的吗?如果你可以用vanilla JS来实现这一点,为什么还要麻烦引入另一个库来完成同样的事情呢?是的,我知道,很明显。但我想知道如何通过使用Lodash解决此任务。