[英]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.