[英]Adding objects to an object property which is an object itself with object assign
所以說我有這個:
const mainObject = {
prop1: false,
prop2: {} or []
}
const minorObject = { name: "name", address: "address" }
const minorObject2 = {name: "name2", address: "address2" }
如何將它們一次添加到mainObject.prop2
而不用Object.assign
改變mainObject
,如果不可能,那么如何使用 ES6 傳播來完成?
當您想保持主引用不可變時,您需要使用shallow copies
,類似於使用原語時發生的情況。
字符串示例(當字面上聲明時,它們被視為原語):
var a = 'Hello'; var b = a; b += ' World'; console.log({a, b});
正如你所看到的,改變b
變量a
仍然是不可變的......這是因為primitives are passed by value
。
因為Object
不是原語,所以它是passed by reference
,上面的例子變成:
var a = { prop: 'Hello' }; var b = a; b.prop += ' World'; console.log({a, b});
如何將它們一次添加到 mainObject.prop2 而不改變 mainObject ...?
var a = { prop: 'Hello' } var minorA = { prop1: ' World' }; var minorB = { prop2: ' Moon' }; var b = Object.assign({}, a); //create a shallow copy Object.assign(b, minorA, minorB) // because you can pass as many params you want, you can simplify the previous code in this way: var b = Object.assign({}, a, minorA, minorB);
ES6傳播如何做到這一點?
Object spread operator
,即在esnext
,您可以將其與 babel 和Object rest spread transform 一起使用
var b = {...a};
Object.assign 將改變作為第一個參數傳遞的對象,所以如果你想組合兩個對象的屬性而不改變任何一個,只需將一個 Object.assign 包裝在另一個中。
Object.assign(Object.assign({},mainObject),minorObject)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.