如何用 objects.assign 组合对象?
How to combine objects with objects.assign?
我的简单代码
const ob1 = {
a: 'pokushevski',
b: '2001',
};
const obj2 = {
obj1: {},
c: '1999',
};
const result = Object.assign(ob1, obj2);
console.log(result);
console.log(Object.getOwnPropertyNames(result));
输出
{ a: 'pokushevski', b: '2001', obj1: {}, c: '1999' }
[ 'a', 'b', 'obj1', 'c' ]
结果中的 obj1
似乎与任何其他属性一样,没有任何对 const obj1
的引用。
为什么?
你现在所做的基本上是将 ob1
(没有 'j')与 obj2
(有 'j')合并,并且由于 obj1
( 'j') 是 obj2
内的空对象,它作为 属性 添加到生成的合并对象上。
您还有什么期望,我们可以帮助您实现目标吗?
也许您实际上打错了字,想要将第一个对象 ob1
命名为 obj1
,然后用作 obj2
中的 属性,最后合并两个对象?
如果是,你可以这样做:
const obj1 = {
a: 'pokushevski',
b: '2001',
};
const obj2 = {
obj1, // shorthand syntax, property will be named the same as the const
c: '1999',
};
// avoid mutation by using a new object as the target
const result = Object.assign({}, obj1, obj2);
// Display result and property names
console.log(result);
console.log(Object.getOwnPropertyNames(result));
如果您只想在 obj2
内添加 obj1
,则不需要 Object.assign
注意可变因素
使用上面的代码,每当您更新 result.obj1
属性时,原始 obj1
都会被修改。尝试更新 result.obj1.a
然后 console.log(obj1)
如果你想避免这种情况,你可以像这样使用解构:
const obj1 = {
a: 'pokushevski',
b: '2001',
};
// Create a shallow copy of `obj1` to prevent mutating the original
// object by updating `obj2.obj1` properties
const obj2 = {
obj1: {...obj1},
c: '1999',
};
// Avoid mutating the original `obj1` by using a new object as the target
const result = Object.assign({}, obj1, obj2);
// Display result and property names
console.log(result);
console.log(Object.getOwnPropertyNames(result))
如果你真的想继续使用 Object.assign
而不是解构,你可以用 obj1: Object.assign({}, obj1)
替换 obj1: {...obj1}
我猜你想让 ob1 成为 obj2 中的 obj1
那么这是一种方法:
const ob1 = {
a: 'pokushevski',
b: '2001',
};
const obj2 = {
obj1: {},
c: '1999',
};
const result = Object.assign({}, obj2);
Object.assign(result.obj1, ob1);
console.log(result);
console.log(Object.getOwnPropertyNames(result));
我的简单代码
const ob1 = {
a: 'pokushevski',
b: '2001',
};
const obj2 = {
obj1: {},
c: '1999',
};
const result = Object.assign(ob1, obj2);
console.log(result);
console.log(Object.getOwnPropertyNames(result));
输出
{ a: 'pokushevski', b: '2001', obj1: {}, c: '1999' }
[ 'a', 'b', 'obj1', 'c' ]
结果中的 obj1
似乎与任何其他属性一样,没有任何对 const obj1
的引用。
为什么?
你现在所做的基本上是将 ob1
(没有 'j')与 obj2
(有 'j')合并,并且由于 obj1
( 'j') 是 obj2
内的空对象,它作为 属性 添加到生成的合并对象上。
您还有什么期望,我们可以帮助您实现目标吗?
也许您实际上打错了字,想要将第一个对象 ob1
命名为 obj1
,然后用作 obj2
中的 属性,最后合并两个对象?
如果是,你可以这样做:
const obj1 = {
a: 'pokushevski',
b: '2001',
};
const obj2 = {
obj1, // shorthand syntax, property will be named the same as the const
c: '1999',
};
// avoid mutation by using a new object as the target
const result = Object.assign({}, obj1, obj2);
// Display result and property names
console.log(result);
console.log(Object.getOwnPropertyNames(result));
如果您只想在 obj2
内添加 obj1
,则不需要 Object.assign
注意可变因素
使用上面的代码,每当您更新 result.obj1
属性时,原始 obj1
都会被修改。尝试更新 result.obj1.a
然后 console.log(obj1)
如果你想避免这种情况,你可以像这样使用解构:
const obj1 = {
a: 'pokushevski',
b: '2001',
};
// Create a shallow copy of `obj1` to prevent mutating the original
// object by updating `obj2.obj1` properties
const obj2 = {
obj1: {...obj1},
c: '1999',
};
// Avoid mutating the original `obj1` by using a new object as the target
const result = Object.assign({}, obj1, obj2);
// Display result and property names
console.log(result);
console.log(Object.getOwnPropertyNames(result))
如果你真的想继续使用 Object.assign
而不是解构,你可以用 obj1: Object.assign({}, obj1)
obj1: {...obj1}
我猜你想让 ob1 成为 obj2 中的 obj1
那么这是一种方法:
const ob1 = {
a: 'pokushevski',
b: '2001',
};
const obj2 = {
obj1: {},
c: '1999',
};
const result = Object.assign({}, obj2);
Object.assign(result.obj1, ob1);
console.log(result);
console.log(Object.getOwnPropertyNames(result));