我有两个给定的类SgFormsBase
和QuestionBase
,其成员名称略有不同,我想将其中的observable[]
转换为另一个。
import { of, Observable } from 'rxjs'
import { map} from 'rxjs/operators'
class SgFormsBase{
constructor(
public id: number,
public survey: string
){}
}
class QuestionBase{
constructor(
public qid: number,
public qsurvey: string
){}
}
const a = new SgFormsBase(11, 'Endo')
const b = new SgFormsBase(12, 'Kolo')
const sg = of([a, b] )
function toQuestionsBase(sgforms: Observable<SgFormsBase[]>): Observable<QuestionBase[]> {
return sgforms.pipe(map(
sgform => new QuestionBase(sgform.id, sgform.survey)))
}
toQuestionsBase(sg)
答案 0 :(得分:2)
由于源的可观察项是SgFormsBase[]
的可观察项,因此它发出的每个值都是一个完整的数组。因此,可观察的map
运算符将接收整个数组。可观察的map
运算符内需要另一个数组映射运算符。
function toQuestionsBase(sgforms: Observable<SgFormsBase[]>): Observable<QuestionBase[]> {
return sgforms.pipe(map(
sgforms => sgforms.map(sgform => new QuestionBase(sgform.id, sgform.survey))))
}
答案 1 :(得分:1)
参数 sgForms 用 SgFormsBase 的 array 解析。因此,您需要做的是分别发出每个值,映射各个值到 QuestionBase实例,然后将其压缩回去一个数组。
function toQuestionsBase(sgforms: Observable<SgFormsBase[]>): Observable<QuestionBase[]> {
return sgforms.pipe(
mergeMap((sgs: SgFormsBase[]) => sgs),
map((sgForm: SgFormsBase) => new QuestionBase(sgForm.id, sgForm.survey)),
toArray());
}