对象传播没有给出预期的结果
Object spread not giving desired results
let me={
name:"Shivendra",
age:21
}
let you={
name:"Neha",
age:22
}
let mergeMeAndYou={
...me, ...you
}
console.log(mergeMeAndYou);
我得到输出:- { name: 'Neha', age: 22 }
现在我没想到会这样。任何人都可以解释这个结果吗? &我现在将如何获得合并的对象?我正在使用节点版本 8.9.4。
我认为您误解了对象传播的作用。它将每个对象的属性列成一个新的对象。如果您对多个对象执行此操作,它将对象的属性合并到一个新对象中。如果多个传播对象中存在相同的属性,则来自较晚对象的那个将获胜。您是否希望它将对象附加到新的父结构中?或者您希望看到什么?
如果你想将对象放入父对象中,试试这个:
const us = { me, you }
或父数组:
const we = [ me, you ]
您可以通过用 {
和 }
包围对象来做到这一点,例如:{...obj}
let me={
name:"Shivendra",
age:21
}
let you={
name:"Neha",
age:22
}
//Putting the me and you on an array.
let mergeMeAndYou = [
{...me},{ ...you}
]
console.log(mergeMeAndYou);
//Putting the me and you on an object.
let mergeMeAndYou2 = {
me:{...me}, you:{ ...you}
}
console.log(mergeMeAndYou2);
注意:根据您想要组合对象的方式,您并不真的需要展开对象。您可以:
let mergeMeAndYou = [me,you];
let mergeMeAndYou2 = {me:me, you:you}
查看结果。 mergeMeAndYou 函数用 'you' 替换 'me' 对象,mergeYouAndMe 函数用 me
替换 'you' 对象
let me={
name:"Shivendra",
age:21
}
let you={
name:"Neha",
age:22
}
let mergeMeAndYou={
...me, ...you
}
let mergeYouAndMe={
...you, ...me
}
console.log(mergeMeAndYou);
console.log(mergeYouAndMe);
对象字面量中的扩展语法将对象属性复制到新对象上。
来自 MDN docs:
The Rest/Spread Properties for ECMAScript proposal (stage 4) adds spread properties to object literals. It copies own enumerable properties from a provided object onto a new object.
提供的例子如下:
var obj1 = { foo: 'bar', x: 42 };
var obj2 = { foo: 'baz', y: 13 };
var clonedObj = { ...obj1 };
// Object { foo: "bar", x: 42 }
var mergedObj = { ...obj1, ...obj2 };
// Object { foo: "baz", x: 42, y: 13 }
let me={
name:"Shivendra",
age:21
}
let you={
name:"Neha",
age:22
}
let mergeMeAndYou={
...me, ...you
}
console.log(mergeMeAndYou);
我得到输出:- { name: 'Neha', age: 22 }
现在我没想到会这样。任何人都可以解释这个结果吗? &我现在将如何获得合并的对象?我正在使用节点版本 8.9.4。
我认为您误解了对象传播的作用。它将每个对象的属性列成一个新的对象。如果您对多个对象执行此操作,它将对象的属性合并到一个新对象中。如果多个传播对象中存在相同的属性,则来自较晚对象的那个将获胜。您是否希望它将对象附加到新的父结构中?或者您希望看到什么?
如果你想将对象放入父对象中,试试这个:
const us = { me, you }
或父数组:
const we = [ me, you ]
您可以通过用 {
和 }
包围对象来做到这一点,例如:{...obj}
let me={
name:"Shivendra",
age:21
}
let you={
name:"Neha",
age:22
}
//Putting the me and you on an array.
let mergeMeAndYou = [
{...me},{ ...you}
]
console.log(mergeMeAndYou);
//Putting the me and you on an object.
let mergeMeAndYou2 = {
me:{...me}, you:{ ...you}
}
console.log(mergeMeAndYou2);
注意:根据您想要组合对象的方式,您并不真的需要展开对象。您可以:
let mergeMeAndYou = [me,you];
let mergeMeAndYou2 = {me:me, you:you}
查看结果。 mergeMeAndYou 函数用 'you' 替换 'me' 对象,mergeYouAndMe 函数用 me
替换 'you' 对象let me={
name:"Shivendra",
age:21
}
let you={
name:"Neha",
age:22
}
let mergeMeAndYou={
...me, ...you
}
let mergeYouAndMe={
...you, ...me
}
console.log(mergeMeAndYou);
console.log(mergeYouAndMe);
对象字面量中的扩展语法将对象属性复制到新对象上。
来自 MDN docs:
The Rest/Spread Properties for ECMAScript proposal (stage 4) adds spread properties to object literals. It copies own enumerable properties from a provided object onto a new object.
提供的例子如下:
var obj1 = { foo: 'bar', x: 42 };
var obj2 = { foo: 'baz', y: 13 };
var clonedObj = { ...obj1 };
// Object { foo: "bar", x: 42 }
var mergedObj = { ...obj1, ...obj2 };
// Object { foo: "baz", x: 42, y: 13 }