展平太多可观察的嵌套对象
flatten too many nested object observable
我有一个对象,其中包含几层需要展平的嵌套集合属性。这是我的观察结果:
const source1$ = of(
{
code: '00a',
data: [
{
id: 1,
name: 'jon',
jobs: [
{
name: 'developer',
level: [
1
]
}
]
},
{
id: 2,
name: 'smith',
jobs: [
{
name: 'driver',
level: [
2, 3
]
}
]
},
]
});
现在我想在 rxjs 运算符的帮助下变成像下面的对象。我尝试用 map,reduce,pluck 来做,但无法达到目标。
{
code: '00a',
data: [
{
id: 1,
name: 'jon',
jobs: 'developer(1)'
},
{
id: 2,
name: 'smith',
jobs: 'driver(2,3)'
}
]
}
看起来你想要这样的东西:
source1$.pipe(
map(v => ({
...v,
data: v.data.map(d => ({
...d,
jobs: d.jobs.map(j => `${j.name}(${j.level.join()})`).join('-')
}))
}))
)
附带说明: 如果您的应用程序像这样进行大量嵌套对象更新,请查看为您实现镜头的库。他们让这一切变得更好。
更新:
这是做类似事情的另一种可能方法。在这里,您改变了所有常见警告附带的数据。
source1$.pipe(
map(v => {
v.data.forEach(d =>
d.jobs = d.jobs
.map(j => `${j.name}(${j.level.join()})`)
.join('-')
);
return v;
})
);
我是这样做的,正在寻找更好的解决方案
source1$
.pipe(
map(v =>
({
...v,
data: v.data.map(x =>
({
...x,
jobs: x.jobs.map(j =>
`${j.name}(${j.level.join()})`
).join('-')
})
)
})
)
)
.subscribe(console.log)
我有一个对象,其中包含几层需要展平的嵌套集合属性。这是我的观察结果:
const source1$ = of(
{
code: '00a',
data: [
{
id: 1,
name: 'jon',
jobs: [
{
name: 'developer',
level: [
1
]
}
]
},
{
id: 2,
name: 'smith',
jobs: [
{
name: 'driver',
level: [
2, 3
]
}
]
},
]
});
现在我想在 rxjs 运算符的帮助下变成像下面的对象。我尝试用 map,reduce,pluck 来做,但无法达到目标。
{
code: '00a',
data: [
{
id: 1,
name: 'jon',
jobs: 'developer(1)'
},
{
id: 2,
name: 'smith',
jobs: 'driver(2,3)'
}
]
}
看起来你想要这样的东西:
source1$.pipe(
map(v => ({
...v,
data: v.data.map(d => ({
...d,
jobs: d.jobs.map(j => `${j.name}(${j.level.join()})`).join('-')
}))
}))
)
附带说明: 如果您的应用程序像这样进行大量嵌套对象更新,请查看为您实现镜头的库。他们让这一切变得更好。
更新:
这是做类似事情的另一种可能方法。在这里,您改变了所有常见警告附带的数据。
source1$.pipe(
map(v => {
v.data.forEach(d =>
d.jobs = d.jobs
.map(j => `${j.name}(${j.level.join()})`)
.join('-')
);
return v;
})
);
我是这样做的,正在寻找更好的解决方案
source1$
.pipe(
map(v =>
({
...v,
data: v.data.map(x =>
({
...x,
jobs: x.jobs.map(j =>
`${j.name}(${j.level.join()})`
).join('-')
})
)
})
)
)
.subscribe(console.log)