有什么方法可以合并兩個物件,例如Object.assign(a, b),但我希望相同的欄位a保持其原始值(不覆寫 from b)。
a = {x: 1, y: 2}
b = {y: 3, z: 4}
Object.assign(a, b)
// Now we get a = {x: 1, y: 3, z: 4}, so what if I want {x: 1, y: 2, z: 4}?
console.log(a)
uj5u.com熱心網友回復:
對此的最佳解決方案是避免使用 Object.assign 并使用擴展運算子,因為這樣做您將通過簡單的邏輯實作您的目標。在展開運算子中,最右邊的元素會覆寫左邊的元素。
a = {x: 1, y: 2};
b = {y: 3, z: 4};
result = {...b, ...a};
result2 = {...a, ...b};
console.log(result); // {x: 1, y: 2, z: 4}
console.log(result2); // {x: 1, y: 3, z: 4}
uj5u.com熱心網友回復:
let a = { x: 1, y: 2 };
let temp = { ...a };
let b = { y: 3, z: 4 };
Object.assign(a, b);
Object.assign(a, temp);
console.log(a);
uj5u.com熱心網友回復:
您可以使用Object.entries并過濾掉已經在a.
例如。
a = {x: 1, y: 2}
b = {y: 3, z: 4}
//Object.assign(a, b)
// Now we get a = {x: 1, y: 3, z: 4}, so what if I want {x: 1, y: 2, z: 4}?
Object.assign(a, Object.fromEntries(
Object.entries(b).
filter(([k])=>!(k in a))));
console.log(a)
uj5u.com熱心網友回復:
要修改a參考(就像您似乎想要從您的示例中所做的那樣),您可以執行以下操作:
const a = {x: 1, y: 2};
const b = {y: 3, z: 4};
Object.assign(a, {...b, ...a});
console.log(a);
這實質上是說,用b來自的那些替換重疊的屬性a,然后將這個替換的物件合并到a。
上面,第一個與{...b, ...a}合并,因此覆寫 中的屬性,給我們:abab
{y: 3, z: 4, x: 1, y: 2}
// evalutes to
{z: 4, x: 1, y: 2}
a現在我們將此結果與Object.assign()呼叫合并:
{x: 1, y: 2, z: 4, x: 1, y: 2}
// evalutes to
{z: 4, x: 1, y: 2}
// ie:
{x: 1, y: 2, z: 4}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/495644.html
標籤:javascript 目的 数据结构 分配
下一篇:向表格單元格添加描述
