Я работаю над приложением 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 || '';
}
}
[![][1]][1]
Мне нужно назначить вложенную коллекцию из json для параметров, которые являются preDefineAnswer из модели данных
Мне нужно заменить параметры: [{key: 'solid', value: 'Solid'}, {key: 'great', value: 'Great'}, {key: 'good', value: 'Good'}, { key: 'unproven', value: 'Unproven'}] с коллекциями preDefineAnswer в цикле, как вы видите, эта часть является жестким кодом для целей тестирования, но я получил данные из источника json, коллекция которого
Мне действительно нужна помощь, дайте мне знать, если это достаточно ясно .. спасибо
И какова будет логика отображения? Какой член из preDefineAnswer должен быть ключом, а какой - значением? Как вы хотите разделить один объект на коллекцию?
Я только что загрузил экран источника данных внизу моего вопроса, key = preDefineAnswerId и value = text

Вы можете использовать функцию Array.prototype.map:
for(var key in questionsList)
{
let _dropBox = new DropdownQuestion({
[...],
options: questionsList[key].preDefineAnswer.map(a => {key: a.preDefineAnswerId, value: a.text},
[...]
});
Я получаю неиспользуемую метку для ключа и значения
Я загрузил снимок экрана с ошибкой внизу моего вопроса, ошибка после использования карты
Я не понимаю того, чего вы пытаетесь достичь. Параметр options вашего
QuestionBaseне ожидает членаoptions. А что вы хотите сопоставить сoptions?