分解对象并在一行中分配给另一个对象

时间:2020-06-23 15:04:26

标签: javascript javascript-objects

有没有办法一行完成以下操作?

let person = {}

const { firstName, lastName } = getNames()
//or this
//const { firstName, lastName } = await getNames()

person.firstName = firstName
person.lastName = lastName

我经常在编码时这样做,并希望有一个捷径。我在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment上看不到任何提示。

我正在尝试类似下面的操作,但是它会覆盖对象中的其他属性。

let person = { age: 20 }
person = { ...getNames() }

我认为这也不适合与async / await函数配合使用,因为它们会返回承诺。

let person = { age: 20 }
person = { ...await getNames() }

2 个答案:

答案 0 :(得分:1)

您可以为此使用Object.assign。例如。

let person = { firstName: 'John', lastName: 'Doe', age: 67, //etc... }

let newPerson = Object.assign(person, getNames()) 

console.log(newPerson)

// Expected output: `{ firstName: 'newFirstName', lastName: 'newLastName', age: 67, etc... }` 

您可以在此处查看有关Object.assign的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

答案 1 :(得分:1)

您可能会尝试这样的事情:

({firstName: person.fistName, lastName: person.lastName} = getNames());

您需要预先将person定义为对象。