Как сопоставить вложенную коллекцию с объектом экземпляра класса в TypeScript

Я работаю над приложением Angular и мне нужен вложенный объект карты с коллекцией. У меня есть карта первой половины данных, но я изо всех сил пытаюсь сопоставить коллекцию, справочные параметры [] под заголовком «Код сопоставления»

Я добавил базовый класс вопроса, за которым следует класс DropdownQuestion, с которым я собираюсь сопоставить данные json. структура данных json находится в классе модели данных

класс модели данных

export class QuestionsDataModel
{
  consultationId: string;
  displayId: string;
  displayOrder: string;
  questionId: string;
  questionType: string;
  title: string;
  questionElement: {
    questionElementId: string;
    questionElementTypeId: string;
    questionId: string;
    questionElementType: {
        id:string;
        typeDefination: string;
        validation: string;
    };
    preDefineAnswer:{
        questionElementId:string;
        preDefineAnswerId:string;
        text:string;
        preDefineSubAnswer:{
            preDefineAnswerId: string;
            preDefineSubAnswerId: string;
            subText:string;
        };
     };
   }  ;
 }

Код сопоставления (здесь нужна помощь)

 for(var key in questionsList)
 {
   let _dropBox = new DropdownQuestion({
      consultationId: questionsList[key].consultationId,
      questionId: questionsList[key].questionId,
      questionElementId: questionsList[key].questionElementId,          
      questionType: questionsList[key].questionType,
      title:questionsList[key].title,
      key: questionsList[key].questionId,    
      label: questionsList[key].title,

      options: [  // need help here, how to map this collection from json data
        {key: 'solid',  value: 'Solid'},
        {key: 'great',  value: 'Great'},
        {key: 'good',   value: 'Good'},
        {key: 'unproven', value: 'Unproven'}
      ],
      order: 1
    });

Раскрывающийся класс

import { QuestionBase } from './question-base';

 export class DropdownQuestion extends QuestionBase<string> {
 controlType = 'dropdown';
 options: {key: string, value: string}[] = [];

 constructor(options: {} = {}) {
    super(options);
   this.options = options['options'] || [];
 }
 }

Вопрос Базовый класс

export class QuestionBase<T>{
consultationId: string;
questionId: string;
questionElementId:string;
questionType:string;
title:string;
value: T;
key: string;
label: string;
required: boolean;
order: number;
controlType: string;


constructor(options: {
    consultationId?:string,
    questionId?:string,
    questionElementId?:string,
    questionType?:string,
    title?:string,
    value?: T,
    key?: string,
    label?: string,
    required?: boolean,
    order?: number,
    controlType?: string
  } = {}) {
  this.consultationId = options.consultationId,
  this.questionId = options.questionId,
  this.questionElementId = options.questionElementId,
  this.questionType = options.questionType,
  this.title = options.title,
  this.value = options.value;
  this.key = options.key || '';
  this.label = options.label || '';
  this.required = !!options.required;
  this.order = options.order === undefined ? 1 : options.order;
  this.controlType = options.controlType || '';
  }
}

Как сопоставить вложенную коллекцию с объектом экземпляра класса в TypeScript

[![][1]][1]

ошибка после использования карты

Как сопоставить вложенную коллекцию с объектом экземпляра класса в TypeScript

Я не понимаю того, чего вы пытаетесь достичь. Параметр options вашего QuestionBase не ожидает члена options. А что вы хотите сопоставить с options?

Markai 14.03.2018 13:47

Мне нужно назначить вложенную коллекцию из json для параметров, которые являются preDefineAnswer из модели данных

Toxic 14.03.2018 13:50

Мне нужно заменить параметры: [{key: 'solid', value: 'Solid'}, {key: 'great', value: 'Great'}, {key: 'good', value: 'Good'}, { key: 'unproven', value: 'Unproven'}] с коллекциями preDefineAnswer в цикле, как вы видите, эта часть является жестким кодом для целей тестирования, но я получил данные из источника json, коллекция которого

Toxic 14.03.2018 13:52

Мне действительно нужна помощь, дайте мне знать, если это достаточно ясно .. спасибо

Toxic 14.03.2018 13:53

И какова будет логика отображения? Какой член из preDefineAnswer должен быть ключом, а какой - значением? Как вы хотите разделить один объект на коллекцию?

Markai 14.03.2018 13:55

Я только что загрузил экран источника данных внизу моего вопроса, key = preDefineAnswerId и value = text

Toxic 14.03.2018 14:00
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
6
301
1

Ответы 1

Вы можете использовать функцию Array.prototype.map:

for(var key in questionsList)
{
 let _dropBox = new DropdownQuestion({
   [...],
   options: questionsList[key].preDefineAnswer.map(a => {key: a.preDefineAnswerId, value: a.text},
   [...]
 });

Я получаю неиспользуемую метку для ключа и значения

Toxic 14.03.2018 14:11

Я загрузил снимок экрана с ошибкой внизу моего вопроса, ошибка после использования карты

Toxic 14.03.2018 14:20

Другие вопросы по теме