給定兩個物件,命名為:ObjectA和ObjectB:
var ObjectA = {
config1: "5",
config2: "6",
config3: "7"
}
var ObjectB = {
config1: "1",
config2: "2",
config4: "3",
config5: "4"
}
如何復制 from ObjectBtoObjectA以便ObjectA具有相同的屬性,ObjectB而ObjectA保留in 中的屬性值并將ObjectB that doesn't existin 中的ObjectA值復制到ObjectA?
預期結果:
ObjectA = {
config1: "5",
config2: "6",
config4: "3",
config5: "4"
}
config3被洗掉,因為它不存在于ObjectB,config4withconfig5被復制到,ObjectA因為那些不存在ObjectA,- 和in
config1with 的值config2保持不變,ObjectA因為這兩個物件都存在于兩個物件中)
uj5u.com熱心網友回復:
使用reduce:
ObjectA = Object.keys(ObjectB).reduce(
(acc, key) => ({ ...acc, [key]: ObjectA[key] ?? ObjectB[key]}), {}
)
這將使用來自 的鍵,從ObjectB中獲取值ObjectA,當它們存在時(回退到ObjectB),并用結果填充一個空物件。
uj5u.com熱心網友回復:
可以使用reducer函式來解決。
var ObjectA = {
config1: "5",
config2: "6",
config3: "7"
}
var ObjectB = {
config1: "1",
config2: "2",
config4: "3",
config5: "4"
}
const res = Object.keys(ObjectB).reduce((prev, next) => {
if(ObjectA[next]){
prev[next] = ObjectA[next];
}
return prev;
}, {...ObjectB})
console.log(res)
uj5u.com熱心網友回復:
這是一個更老派的可能解決方案:這基本上是做什么的:
- 回圈遍歷 ObjectA 中的屬性。如果ObjectB中不存在,則洗掉
- 回圈遍歷 ObjectB 中的屬性。如果它在 ObjectA 中不存在,則復制它。
function mergeObject(oldObj: Object, newObj: Object) {
var copyOfOldObj = Object.assign({}, oldObj);
for (const key in copyOfOldObj) {
if (!newObj.hasOwnProperty(key)) {
delete copyOfOldObj[key];
}
}
for (const key in newObj) {
if (!copyOfOldObj.hasOwnProperty(key)) {
copyOfOldObj[key] = newObj[key];
}
}
return copyOfOldObj;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/402239.html
標籤:javascript 目的
