所以说我有这个:
const mainObject = {
prop1: false,
prop2: {} or []
}
const minorObject = { name: "name", address: "address" }
const minorObject2 = {name: "name2", address: "address2" }
如何在不mainObject.prop2
mainObject
的情况下将其添加到Object.assign
,如果不可能,那么如何通过ES6传播完成?
答案 0 :(得分:1)
如果要保留主要参考不可变,则需要使用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的情况下将它们一次添加到mainObject.prop2中??
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};
答案 1 :(得分:0)
Object.assign会改变作为第一个参数传递的对象,所以如果你想要组合两个对象的属性而不改变它们,只需将一个Object.assign包装在另一个对象中。
Object.assign(Object.assign({},mainObject),minorObject)
答案 2 :(得分:-1)
How to push elements of an object into another object?
Add Javascript Object into another Javascript Object
google keyword search = 将对象添加到另一个对象
还有更多的例子和方法。