我有 2 个集合,“父”和“子”集合。
我需要:
通过 ctaTypeNameUID 在父项中查找子项
如果子对象值不为空,则父对象应被子对象覆盖。
保持孩子的秩序
仅保留子项上存在的父项 + 子项中的自定义项
父对象
"parentObjectOverrideable": [{
"cta_type": {
"title": null,
"ctaTypeNameUID": "enjoy-new-york",
"form-url": "F-2009",
"city": "New York",
"address": null
}
},
{
"cta_type": {
"title": null,
"ctaTypeNameUID": "enjoy-london",
"form-url": "F-2010",
"city": "London",
"address": null
}
}
]
子对象
"childObject": [{
"cta_type": {
"title": "Enjoy London",
"ctaTypeNameUID": "enjoy-london",
"form-url": "F-2009",
"city": null,
"address": null
}
},
{
"cta_type": {
"title": "Enjoy New York",
"ctaTypeNameUID": "enjoy-new-york",
"form-url": "F-22827166628",
"city": null,
"address": null
}
},
]
我曾尝试使用 Lodash 的 _mergeWith
const result = _.mergeWith([], parentObjectOverrideable, childObject, (a, b) =>
b === null || b === '' ? a : undefined
)
问题是,如果 cta_type 在子对象上的位置不同,它也会覆盖 UID,因此您会得到如下内容:
"parentObjectOverrideable": [{
"cta_type": {
"title": "Enjoy London",
,
"ctaTypeNameUID": "enjoy-new-york",
"form-url": "F-2009"
"city": null "address": null
}
},
{
"cta_type": {
"title": "Enjoy New York",
"ctaTypeNameUID": "enjoy-london",
"form-url": "F-2010",
"city": null,
"address": null
}
}
]
我也试过这样做
const overrideObject = (objA, objB) => {
const newObject = { ...objB
}
Object.keys(objA).forEach((key) => {
if (objA[key]) {
newObject[key] = objA[key]
}
})
console.log(newObject)
}
知道如何做到这一点吗?