Javascript 洛达斯。智能按关键点合并两个对象

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"

我有两个物体。A和B

A

B

如何循环A关键点,将其与B对象进行比较,并通过Lodash更新A对象中现有关键点的值?也许有什么好办法?我试着使用assing,但看起来我还不明白它是如何工作的

结果应该如下所示:

{
   "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解决此任务。