JSON - объект в массиве в объекте - как разобрать цикл с JS? - PullRequest
0 голосов
/ 08 мая 2018

Если бы у меня была эта схема:

[{
    "Id": 2,
    "Prizes": [{
        "Id": 5,
        "Status": 0,
        "ClaimCode": "PN0016CXC1WPM64P",
        "User": {
            "FirstName": "John",
            "SecondName": "Doe",
        },
        "DrawId": 2,
        "PrizeId": 22,
        "Prize": null
    }]
}]

Как я могу получить имя или любое значение в объекте User, который находится в призах массива, то есть в основном JSON?

Я пробовал это:

 const response = JSON.parse(this.responseText);
 response.Prizes[0].User.forEach(function(a) {
     output += `<li>${a.FirstName}</li>`;
 });

Но, получив ошибку неопределенную, я считаю, что ее можно извлечь, но нужен только правильный синтаксис. Или это нельзя сделать с помощью цикла for?

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Поскольку у вас есть массив объектов, а внутри объекта - массив значений (Prizes), вы можете использовать вложенные Array.forEach() вызовы, чтобы получить внутренние значения, заключив их в строку и нажмите на массив items:

const response = [{"Id":2,"Prizes":[{"Id":5,"Status":0,"ClaimCode":"PN0016CXC1WPM64P","User":{"FirstName":"John","SecondName":"Doe"},"DrawId":2,"PrizeId":22,"Prize":null}]}];

const items = [];

response.forEach((o) => 
  o.Prizes.forEach((p) =>
    items.push(`<li>${p.User.FirstName}</li>`)
  ));
  
list.innerHTML = items.join('');
<ul id="list"></ul>
0 голосов
/ 08 мая 2018

Поскольку у вас есть многомерный массив, и вам нужно использовать Prizes как внутри массива.

Итак, сначала вы можете объединить все Prizes в один, используя reduce() и Spread_syntax, а затем после использования map() с объединением Для получения необходимого результата.

DEMO

const response = [{"Id":2,"Prizes":[{"Id":5,"Status":0,"ClaimCode":"PN0016CXC1WPM64P","User":{"FirstName":"John","SecondName":"Doe"},"DrawId":2,"PrizeId":22,"Prize":null}]}];

let res = response.reduce((r,{Prizes}) =>[...r,...Prizes],[]).map(({User})=>`<li>${User.FirstName}</li>`).join('');

document.querySelector('ul').innerHTML =res ;
<ul></ul>
0 голосов
/ 08 мая 2018

Прежде всего Response - это массив, а User - объект, это должно работать:

const response = JSON.parse(this.responseText);

response.map((resp) => {
    resp.Prizes.map((prize) => {
        output += `<li>${prize.User.FirstName}</li>`;

    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...