【问题标题】:Using spread syntax to dynamically merge objects使用扩展语法动态合并对象
【发布时间】:2018-07-03 13:59:24
【问题描述】:

新的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();

在运行时生成了一个可迭代的对象列表,我怎样才能像上面的例子那样迭代地使用扩展运算符来创建一个汇总对象?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以使用带有扩展语法的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)

    【讨论】:

    • 值得注意的是{ ...[] } 的结果是{}
    • 另外,{ ...{} } 的结果是 {}
    【解决方案2】:

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

    不使用属性扩展符号*,不。相反,您将使用Object.assign。如果对象的数量未知,您可以使用(有趣的)数组展开来传递一个数组:

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

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-15
      • 2011-06-15
      • 2016-07-22
      • 2020-06-07
      • 2016-03-09
      • 2019-08-26
      • 1970-01-01
      相关资源
      最近更新 更多