首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个Merging对象合并为单个对象

将两个Merging对象合并为单个对象
EN

Stack Overflow用户
提问于 2022-01-25 17:52:19
回答 1查看 73关注 0票数 0

我有两个视频对象:

代码语言:javascript
复制
obj1 =
        {
           "name":{
              "required":false,
              "$model":"",
              "$invalid":true,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 }
              }
           },
           "email":{
              "email":true,
              "required":true,
              "$model":"",
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "email":{
                    "type":"email"
                 },
                 "required":{
                    "type":"requiredIf"
                 }
              }
           },
           "shipping":{
              "required":true,
              "$model":"",
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 }
              }
           },
           "company":{
              "$model":"",
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 
              }
           },
           "country":{
              "required":true,
              "$model":{
                 "label":"",
              },
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 }
              }
           },
           "city":{
              "required":false,
              "minLength":false,
              "$model":"",
              "$invalid":true,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 },
                 "minLength":null
              }
           },
           "$model":{
              "name":"",
              "email":"",
              "shipping":"",
              "company":"",
              "country":{
                 "label":"",
              },
              "city":""
           },
           "$invalid":true,
           "$dirty":false,
           "$anyDirty":false,
           "$error":false,
           "$anyError":false,
           "$pending":false,
           "$params":{
              "name":null,
              "email":null,
              "shipping":null,
              "company":null,
              "country":null,
              "city":null
           }
        }
代码语言:javascript
复制
obj2 =
        {
           "address":{
              "$model":"",
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 
              }
           },
           "zipCode":{
              "required":true,
              "$model":"",
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 }
              }
           },
           "mobile":{
              "required":false,
              "minLength":false,
              "$model":"",
              "$invalid":true,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 },
                 "minLength":null
              }
           },
           "$model":{
              "address":"",
              "zipCode":"",
              "mobile":"",
           },
           "$invalid":true,
           "$dirty":false,
           "$anyDirty":false,
           "$error":false,
           "$anyError":false,
           "$pending":false,
           "$params":{
              "address":null,
              "zipCode":null,
              "mobile":null,
           }
        }

我知道的一个事实是,对象1中的键不存在于对象2中,我想要一个结果对象,它是两个对象的组合。

现在,我尝试了多种方法来解决这个问题

例如:

代码语言:javascript
复制
{...obj1, "address": this.obj2.address, "mobile": this.obj2.mobile, "zipCode": this.obj2.zipCode }

这将产生以下结果对象:

代码语言:javascript
复制
{
           "name":{
              "required":false,
              "$model":"",
              "$invalid":true,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 }
              }
           },
           "email":{
              "email":true,
              "required":true,
              "$model":"",
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "email":{
                    "type":"email"
                 },
                 "required":{
                    "type":"requiredIf"
                 }
              }
           },
           "shipping":{
              "required":true,
              "$model":"",
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 }
              }
           },
           "company":{
              "$model":"",
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{

              }
           },
           "country":{
              "required":true,
              "$model":{
                 "label":"",
              },
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 }
              }
           },
           "city":{
              "required":false,
              "minLength":false,
              "$model":"",
              "$invalid":true,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 },
                 "minLength":null
              }
           },
           "address":{
              "$model":"",
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{

              }
           },
           "zipCode":{
              "required":true,
              "$model":"",
              "$invalid":false,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 }
              }
           },
           "mobile":{
              "required":false,
              "minLength":false,
              "$model":"",
              "$invalid":true,
              "$dirty":false,
              "$anyDirty":false,
              "$error":false,
              "$anyError":false,
              "$pending":false,
              "$params":{
                 "required":{
                    "type":"requiredIf"
                 },
                 "minLength":null
              }
           }
           "$model":{
              "name":"",
              "email":"",
              "shipping":"",
              "company":"",
              "country":{
                 "label":"",
              },
              "city":"",
           },
           "$invalid":true,
           "$dirty":false,
           "$anyDirty":false,
           "$error":false,
           "$anyError":false,
           "$pending":false,
           "$params":{
              "name":null,
              "email":null,
              "shipping":null,
              "company":null,
              "country":null,
              "city":null
           }
        }

根对象确实被合并,但是主对象的$model只显示obj1的键,类似地,主对象的$params也只显示obj1的属性,这最终导致$invalid返回true。

我理解,既然$model和$params是两个对象中的共享密钥,这就是为什么在我的示例中,第一个对象优先于第二个对象,那么如何确保这两个属性也共享来自两个对象的相同密钥?

对于上下文而言,obj2来自子组件,obj1是在父组件中创建的,现在从父组件中必须将两个对象作为包含所有属性的单个对象传递。

EN

回答 1

Stack Overflow用户

发布于 2022-01-25 18:03:01

嗨,你可以试试这段代码

代码语言:javascript
复制
Object.keys(obj2).forEach(key => {
    if(key == '$model' || key == '$params') {
        Object.keys(obj2[key]).forEach(subKey => {
            obj1[key][subKey] = obj2[key][subKey]
        })
    } else 
    obj1[key] = obj2[key];
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70853397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档