【问题标题】:Javascript map arrays and merge to one objectJavascript 映射数组并合并到一个对象
【发布时间】:2019-02-19 23:32:09
【问题描述】:

我有以下 firebase 功能

  this.sensorService.getTest()
    .snapshotChanges()
    .pipe(
      map(actions =>
        actions.map(a => ({
          [a.payload.key]: a.payload.val()
        })))
    ).subscribe(sensors => {
      this.sensors = sensors;
      console.log(this.sensors);
    });

它现在将数据返回到不同的数组,console.log 显示如下:

0: {groups: Array(8)}1: {links: Array(35)}2: {nodes: Array(35)}

如何将所有这些数组合并在一起并将它们全部放在一个对象中? Console.log 应该返回:

{groups: Array(8), nodes: Array(35), links: Array(35)}

【问题讨论】:

    标签: javascript angular typescript firebase firebase-realtime-database


    【解决方案1】:

    您可以像这样使用reduce 而不是map

    actions.reduce((acc, a) => {
      acc[a.payload.key] = a.payload.val();
    
      return acc;
    }, {})
    

    【讨论】:

      【解决方案2】:

      鉴于此输入:

      const values = {
         0: { groups: Array(8) },
         1: { links: Array(35) },
         2: { nodes: Array(35) }
      };
      

      您可以使用Object.values() 将值作为数组检索,并使用destructured assignment 将数组归约为对象:

      Object.values(values).reduce((acc, val) => ({ ...acc, ...val }), {})
      

      【讨论】:

      • 尽管我喜欢这种语法,但您在这里为每个循环创建一个新对象
      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多