使用扩展语法动态合并对象

时间:2018-01-24 13:41:34

标签: javascript

新的spread syntax可用于以下列方式优雅地合并多个对象:

const person = { name: 'David Walsh', gender: 'Male' };
const tools = { computer: 'Mac', editor: 'Atom' };

const summary = {...person, ...tools};

有没有办法在动态场景中使用它,其中要合并的对象的数量和名称事先不知道?

如果

var objects_to_be_merged = get_objects();

在运行时生成一个可迭代的对象列表,如何迭代地使用spread运算符来创建一个摘要对象,如上例所示?

2 个答案:

答案 0 :(得分:4)

您可以使用Object.assign()扩展语法来合并对象数组。

const person = { name: 'David Walsh', gender: 'Male' };
const tools = { computer: 'Mac', editor: 'Atom' };

const objects = () => [person, tools];
const summary = Object.assign({}, ...objects());
console.log(summary)

答案 1 :(得分:2)

  

有没有办法在动态场景中使用它,其中要合并的对象的数量和名称事先不知道?

没有财产传播符号*,没有。相反,您使用Object.assign。如果对象的数量未知,您可以使用(有趣的)数组传播将数组传递给它:

const combined = Object.assign({}, ...get_objects());

(据推测get_objects()返回一个数组或其他可迭代的数据。)

目前

*属性差价为a Stage 3 proposal,但在当前的Chrome和Firefox中没有运行时标记,并且可能在ES2018中支持。 (而 array 传播是在ES2015中。)