对象传播没有给出预期的结果

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 }