Я получаю некоторые данные через вызов API (в моем файле dataservicse.ts) - и ответ, который я получаю, является своего рода сложной структурой JSON.Я могу получить определенную часть ответа следующим образом в моем соответствующем файле компонентов следующим образом -
Вот один из ответов объекта JSON, который представляет общую структуру -
{
"address": {
"building": "1234",
"coord": [0, 0],
"street": "123 Main Street",
"zipcode": "00000"
},
"address2": "Test Suite 000",
"grades": [{
"grade": "A",
"score": 3
}, {
"grade": "B",
"score": 4
}, {
"grade": "A",
"score": 2
}],
"name": "John Doe",
"_id": "1212121"
}
Теперь - моя цель - получить атрибут 'name', а также первое значение 'grade' в атрибуте grades из каждого объекта ответа - и отобразить их в отдельные массивы, чтобы я мог отображать их в столбцах таблицы с помощью * ngFor.
Это мой код компонента
export class TestDataComponent implements OnInit {
name$: Object;
grade$: Object;
constructor(private data: DataService, private data2: DataService) { }
ngOnInit() {
//getAPIData is returning the API response from the dataservices.ts file
this.data.getAPIData().subscribe(
data=>console.log(data.response.map(name=>name.name))
); //this works fine - I get the names in an array
this.data2.getAPIData().subscribe(
data2=>console.log((data2.response.map(grade=>grade.grades)).map(grades
=> {grades.map((value, index) => value.grade})) //this returns an undefined value
);
}
Теперь - если я console.log((data2.response.map(grade=>grade.grades))
, я получаю объекты Array of Array, такие как -
Array - [Array(3), Array(3), Array(2)]
, и каждый из них состоитатрибута 'grades' Массив объектов.(беря первый массив сверху) -
Array(3)
0:{"grade": "A","score": 3}
1:{"grade": "B", "score": 4}
2:{"grade": "A", "score": 2}
Таким образом - я дополнительно отображаю свой первоначальный ответ, чтобы получить значение «оценка».Кроме того - я хочу только первый класс - таким образом, у меня есть простое условие, добавленное следующим образом -
console.log((data2.response.map(grade=>grade.grades))
.map(grades
=> {grades.map((value, index) =>{if(index<1) value.grade})}))
Как упомянуто в комментарии - я получаю неопределенное значение.
Я понимаю, что эта проблема может быть довольно сложной, но я изо всех сил старался объяснить ее как можно более четко.Моя цель - получить первые «оценки» значений для каждого объекта и отобразить их в массиве - точно так же, как и имена, чтобы я мог использовать его для отображения в таблице.
Я довольно новичок вAngular6, просто переключаюсь с Angular 1.6 - так что я уверен, что что-то напутал.
Каков наилучший способ получить значения оценок в массиве с помощью вложенного отображения в подписке?Или есть лучший подход к тому же?
Также - ради простоты, игнорируйте тот факт, что присутствует первая подписка (для атрибута имени) - я показал это здесь, чтобы прояснить этоотносительно того, чего я хочу достичь.