Javascript映射数组并合并到一个对象

时间:2018-09-15 11:03:04

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

我有以下firebase函数

^.\\d*[.,]?\\d{0,' + maxDecimalDigits + '}?$

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

  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)}

2 个答案:

答案 0 :(得分:1)

您可以像这样使用map来代替reduce

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

  return acc;
}, {})

答案 1 :(得分:0)

输入以下内容:

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 }), {})