如何将顺序发出的数据转换为单个数组

时间:2019-08-01 07:59:52

标签: angular rxjs rxjs-observables

因此,我正在使用ngrx存储获取数据。一旦从商店中选择了我想要的属性,然后我就订阅了该属性以获得可观察的流。 我的数据包含对象数组。因此,在这个对象数组中,我必须对每个对象的某些属性进行一些修改。

为此,我使用rxjs库的'from()'运算符将对象数组转换为可观察的连续对象,然后将其分配给新的Observable对象。有了这个新的Observable对象,我应用了map函数进行修改,最后又返回了一个新的Observable对象。 直到这一步,一切都正常。 发生问题,当我订阅这个新的可修改可观察对象时,它顺序地发出值,而不是对象的整个数组。 但是我想要修改的对象数组。

this.statusObj = this.store.select(s => s.userStore.data);
this.statusObj.subscribe(rslt => {
    this.usrArr = rslt;
})

this.newstatusObj = from(this.usrArr);
this.newstatusObj2 = this.newstatusObj
    .pipe(map(() => {
        //////some modifications
        return
    }))

this.newstatusObj2.subscribe(val => {
    console.log(val);  //this line is emitting sequential values..but i want array of objects
})

1 个答案:

答案 0 :(得分:0)

您不需要使用.from(),它会根据您的阵列将数据转换为多种发射。由于您的商店已经为您提供了一个可观察的数据,其中包含您要修改的数据,因此只需使用.map()对其进行修改,如下所示:

this.store.select(s => s.userStore.data)
    .pipe(map((rslt)=>{
        //DO YOUR MODIFICATION HERE.
    }))
    .subscribe(val=>{
        console.log(val) // now your data is in array of objects
    })