Javascript映射数组并合并到一个对象
我有以下firebase函数Javascript映射数组并合并到一个对象,javascript,angular,typescript,firebase,firebase-realtime-database,Javascript,Angular,Typescript,Firebase,Firebase Realtime Database,我有以下firebase函数 this.sensorService.getTest() .snapshotChanges() .pipe( map(actions => actions.map(a => ({ [a.payload.key]: a.payload.val() }))) ).subscribe(sensors => { this.sensors = sensor
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)}
您可以使用
reduce
而不是map
,如下所示:
actions.reduce((acc, a) => {
acc[a.payload.key] = a.payload.val();
return acc;
}, {})
鉴于这一投入:
const values = {
0: { groups: Array(8) },
1: { links: Array(35) },
2: { nodes: Array(35) }
};
您可以使用以数组形式检索值,并将数组缩减为具有以下内容的对象:
虽然我很喜欢这种语法,但这里的每个循环都要创建一个新对象
Object.values(values).reduce((acc, val) => ({ ...acc, ...val }), {})