我有两个深层/复杂的对象合并在一起。在'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;
}
};
添加回答
举报
0/150
提交
取消
