【发布时间】:2021-04-22 14:08:11
【问题描述】:
我有 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)
}
知道怎么做吗?
【问题讨论】:
标签: javascript reactjs lodash