如果我有这个架构:
[{
"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循环来完成?
答案 0 :(得分:1)
首先,响应是一个数组,用户是一个对象,这应该是有用的:
const response = JSON.parse(this.responseText);
response.map((resp) => {
resp.Prizes.map((prize) => {
output += `<li>${prize.User.FirstName}</li>`;
})
})
答案 1 :(得分:0)
由于您有一个对象数组,并且在对象内部有一个值数组(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('');
&#13;
<ul id="list"></ul>
&#13;
答案 2 :(得分:0)
由于您有多维数组,因此需要在数组内部使用Prizes
。
首先,您可以使用reduce()
和Spread_syntax
将所有Prizes
合并为一个,然后使用map()
加入mehod以获得所需的结果。
<强>样本强>
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>