簡體   English   中英

如何在 JavaScript 中將一個 object“遷移”到另一個 object?

[英]How to "migrate" one object to another object in JavaScript?

給定兩個 object,命名為: ObjectAObjectB

var ObjectA = {
    config1: "5",
    config2: "6",
    config3: "7"
}
var ObjectB = {
    config1: "1",
    config2: "2",
    config4: "3",
    config5: "4"
}

如何從ObjectB復制到ObjectA以便ObjectA具有與ObjectA相同的屬性,同時保留ObjectB中的屬性值並將ObjectB that doesn't existObjectA的值復制到ObjectA

預期結果:

ObjectA = {
    config1: "5",
    config2: "6",
    config4: "3",
    config5: "4"
}
  • config3被刪除,因為它在ObjectB中不存在,
  • config4config5被復制到ObjectA因為那些在ObjectA中不存在,
  • config1config2 中的值在config2中保持相同,因為這兩個ObjectA都存在)

使用reduce

ObjectA = Object.keys(ObjectB).reduce(
    (acc, key) => ({ ...acc, [key]: ObjectA[key] ?? ObjectB[key]}), {}
)

這將使用來自ObjectA的鍵,從ObjectB獲取值,當它們存在時(回退到ObjectB ),並用結果填充一個空的 object 。

可以使用減速機function來解決。

 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)

這是一個更老派的可能解決方案:這基本上是做什么的:

  • 循環 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM