我有2个不同的对象列表,我想将它们组合在一起例如:
listObj1 = [{name:'bob 1'}, {name:'bob 2'}]
listObj2 = [{pseudo:'Bob Razowski'}, {pseudo:'sponge bob'}]
result = [
{name:'bob 1', pseudo:'Bob Razowski}
{name:'bob 2', pseudo:'sponge bob'}
]
我可以使用rxjs做到这一点吗,以及如何或是否有更好的解决方案让我知道
const characters = [];
const name$ = Observable.from(this.nameList)
.map(item => {
return {'name': item};
})
const pseudo$ = Observable.from(this.pseudoList)
.map(item => {
return {'pseudo': item};
})
Observable.zip(name$, pseudo$).subscribe(result => {
let char= {};
if(result.length > 1) {
char['name'] = result[0];
char['pseudo'] = result[1];
characters.push(char)
}
});
我开始了类似的事情,但是当我看到结果时,无需rxjs就可以做到。我的问题是,是否存在其他运算符来执行此操作。
谢谢
答案 0 :(得分:2)
好吧,您可以使用RxJS进行此操作,但是没有明显的理由这样做,请查看您的代码段。做出反应的原因之一是您的列表确实很长,并且希望让组合发生在(假设的)多个线程上。但是在JavaScript中这并不实际,因此for...of
或Array.map
是执行此类任务的正确选择。
无论如何,RxJS解决方案将如下所示:
zip(
from(listOb1),
from(listObj2)
).pipe(
map(([one, two]) => Object.assign({}, one, two)),
toArray()
)
使用from
将两个列表转换为可观察流,然后zip
将它们一起使用map
将每一对Object.assign
转换为新对象。用toArray
收集对象并完成操作。