Отображение между двумя массивами наблюдаемых классов - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть два заданных класса 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)

Ответы [ 2 ]

2 голосов
/ 05 апреля 2019

Поскольку наблюдаемая исходная величина является наблюдаемой 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 голос
/ 05 апреля 2019

параметр sgForms разрешается с массивом из SgFormsBase .Итак, что вам нужно сделать, это испустить каждое значение по отдельности, сопоставить отдельные значения с экземплярами 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());
}
...