我想在JavaScript中混合两个对象:
let a = {x: 1, y: 2, z:3};
let b = {x:10, y: 20};
let c = Object.assign(a, b);
这为c
:
Object { x: 10, y: 20, z: 3 }
但现在a
也被修改了!
Object { x: 10, y: 20, z: 3 }
有没有办法将a
分配到b
到新对象?
答案 0 :(得分:17)
assign的第一个参数是目标。所以它会改变。如果您不希望任何来源发生变化,您只需为目标传递一个空对象:
let a = {x: 1, y: 2, z:3};
let b = {x:10, y: 20};
let c = Object.assign({},a, b);
console.log(c);
console.log(a); // a is unchanged

答案 1 :(得分:8)
您可以使用spread operator:
let a = {x: 1, y: 2, z: 3};
let b = {x: 10, y: 20};
let c = {
...a,
...b
}
console.log(c);
console.log(a);

答案 2 :(得分:4)
最终点差运算符。它有助于添加单个属性,例如在JS中设置CSS样式。但请注意,它目前是EcmaScript的only in stage 4。
const lessStyle = {
color: 'blue',
backgroundColor: 'yellow'
};
const moreStyle = {...lessStyle, color: 'red'};
// lessStyle is not affected
你今天可以在Typescript和JSX中使用它。
答案 3 :(得分:0)
let a = {x: 1, y: 2, z:3};
let b = {x:10, y: 20};
let c = Object.assign({},a, b);
你需要在第一个对象的assign方法中使用{},因为如果你在这里阅读Object.assign方法的文档https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Parameters它说明第一个参数是目标对象,其余的是源。所以现在你将b分配给a并将新a返回给c。因此,如果您的第一个参数是空对象,则不会发生这种情况。