为了账号安全,请及时绑定邮箱和手机立即绑定

Lodash 合并:如果源值与目标值匹配,则仅复制对象属性

Lodash 合并:如果源值与目标值匹配,则仅复制对象属性

慕勒3428872 2021-10-14 16:58:40
我有两个深层/复杂的对象合并在一起。在'addresses' 数组中需要有两个对象用于两种不同的地址类型,“PRIMARY”和“MAILING”。在我的目标对象中,“PRIMARY” obj 位于“MAILING” obj 上方。除了源对象中只有“MAILING”obj 可用之外,一切都很好。发生这种情况时,两个对象的“addressType”属性都会被“MAILING”覆盖// In destination obj:addresses: [ {  addressType: "PRIMARY",  addressLine1: "",  addressLine2: "",  city: "",  state: "",  zip: "" }, {  addressType: "MAILING",  ... }]// In source obj:addresses: [ {  addressType: "MAILING",  addressLine1: "123 Main St",  addressLine2: "",  city: "Hawkins",  state: "IN",  zip: "46001" }]之后merge/当前输出(重复地址类型):_.merge({}, destination, source); //need new objectaddresses: [     {      addressType: "MAILING",      addressLine1: "123 Main St",      addressLine2: "",      city: "Hawkins",      state: "IN",      zip: "46001"     },     {      addressType: "MAILING",      addressLine1: "",      addressLine2: "",      city: "",      state: "",      zip: ""     }    ]期望输出:// DESIRED OUTPUT:addresses: [     {      addressType: "PRIMARY",      addressLine1: "",      addressLine2: "",      city: "",      state: "",      zip: ""     },     {      addressType: "MAILING",      addressLine1: "123 Main St",      addressLine2: "",      city: "Hawkins",      state: "IN",      zip: "46001"     }    ]来自源的地址数组可能不包含任何对象、两者都包含或一个。所以我的问题是,如果源 obj 中只有“MAILING”,我如何防止它覆盖“PRIMARY”obj,同时留下“MAILING”(来自源)和“PRIMARY”obj(来自目标)?我应该改用 mergeWith 吗?
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

我能够使用以下自定义程序功能以及mergeWith:


mergeWith({}, destination, source, customizer);


const customizer = (objValue, srcValue, key) => {

  if (key === "addresses") {

    let merged = merge(

      keyBy(objValue, "addressType"),

      keyBy(srcValue, "addressType")

    );

    let value = values(merged);

    return value;

  }

};


查看完整回答
反对 回复 2021-10-14
  • 1 回答
  • 0 关注
  • 259 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号