Как использовать foreach на записи в TypeScript и Angular? - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу знать, как я могу восстановить этот C# код в TypeScript

            Dictionary<string, List<string>> sas = new Dictionary<string, List<string>>();
            sas.Add("11", new List<string> { "a", "b", "c" });
            sas.Add("22", new List<string> { "a2", "b2", "c2" });
            foreach(var e in sas)
            {
                Console.WriteLine(e.Key);
                foreach(var s in e.Value)
                {
                    Console.WriteLine(s);
                }
                Console.WriteLine();
            }

Я ожидаю, что я получу в консоли это:

11
a
b
c

22
a2
b2
c2

Обновление

И самое главное, как я могу использовать подобный код в Angular и почему я получаю неопределенный unin мой метод ngOnInit?

Мой класс ответа

import { Question } from './question';

export class Answer {
    AnswerId: number;
    Content: string;
    IsCorrect: boolean;
    Mark: number;
    QuestionId: number;
    Question: Question;
}

Код компонента

testInfo: Record<string, Answer[]>;

    ngOnInit() {
        if (this.id)
            this.dataService.getTestStart(this.id)
                .subscribe((data: Record<string, Answer[]>) =>
                {
                    this.testInfo = data; this.loaded = true;
                    console.log(this.testInfo);

                    for (const key in this.testInfo) {
                        console.log(key);
                        for (const s of this.testInfo[key]) {
                            console.log(s.Content)//here is undefined
                        }
                        console.log()
                    }
                });
    }

Когда я пытаюсь вывести s.Content, я получаю неопределенное значение. И когда я пытаюсь вывести это на странице, используя Angular, я ничего не получаю.

            <tr *ngFor="let key of testInfo">
                <td class="row-number-column">{{key}}</td>
                <template *ngFor="let s of testInfo[key]">
                    <td>
                        {{s?.content}}
                    </td>
                </template>
            </tr>

Ответы [ 3 ]

2 голосов
/ 21 апреля 2020

Это, пожалуй, самый прямой «перевод» на машинопись.

const sas: Record<string, string[]> = {}
sas["11"] = ["a", "b", "c"]
sas["22"] = ["a2", "b2", "c2"]
for (const key in sas) {
    console.log(key)
    for (const s of sas[key]) {
        console.log(s)
    }
    console.log()
}
1 голос
/ 21 апреля 2020

Вы также можете использовать простой объект, вот что получит JavaScript. Или вы можете ввести определение (кроме Record) как

const sas: { [key: string]: string[] } = {};

и попробовать JS эквивалент как

const sas = {};
sas['11'] = [ 'a', 'b', 'c' ];
sas['22'] = [ 'a2', 'b2', 'c2' ];

for (const key in sas) {
    if (sas.hasOwnProperty(key)) {
    
        console.log(key);
        for (const s of sas[key]) {
            console.log(s);
        }
        console.log('');
    }
}
1 голос
/ 21 апреля 2020

машинопись:

  const sas: Record<string, string[]> = {};

  sas['11'] = ['a', 'b', 'c'];
  sas['22'] = ['a2', 'b2', 'c2'];

  for (const key in sas) {
    if (sas.hasOwnProperty(key)) {
      console.log(key)
      for (const key2 in sas[key]) {
        if (sas[key].hasOwnProperty(key2)) {
          console.log(sas[key][key2]);
        }
      }
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...