我具有以下JSON对象的结构。每个Mealplan
包含一个key
和一个对象value
meal
。
id: 1,
mealsPerWeek: {
Monday: {
id: 4,
name: "Burger",
},
Tuesday: {
id: 3,
name: "Salad",
},
id: 2,
mealsPerWeek: {
Monday: {
id: 3,
name: "Salad",
},
Tuesday: {
id: 2,
name: "Fishburger",
},
我想创建一个这样的列表(作为innerHTML):
ID: 1
- Monday: Burger
- Tuesday: Salad
ID 2:
- Monday: Salad
- Tuesday: Fishburger
我已经创建了一个循环,以获取mealplan
ID。资产通过XmlHttpRequest来获取:
renderMealplan(assets) {
let mealplan = [];
for (let i = 0; i < assets.length; i++) {
mealplan[i] = {
id: assets[i].id,
mealsPerWeek: assets[i].mealsPerWeek,
}
}
}
我已经尝试获取像这样的meal
名称的列表:
let content = ''
mealplan.forEach(mealplan => {
content += '<h1>' + mealplan.id + '</h1>' + '<ul>' +
'<li>' + JSON.stringify(mealplan.mealsPerWeek.Monday) +'</li>' +
}); + '</ul>'
但是结果就是:
1
{"id":4,"name":"Burger"}
使用JSON.stringify(mealplan.mealsPerWeek.Monday.name
也不会打印餐食的名称,因为它是未定义的。
如何分隔所有信息并将其打印在列表中?另外,我也没有找到提取keys
的餐数的解决方案。
答案 0 :(得分:1)
您的输入数据在语法上似乎不正确。下面,我尝试将其设置为有效形式:
const arr=[
{id: 1,
mealsPerWeek: { Monday: {id: 4,name: "Burger"},
Tuesday: {id: 3,name: "Salad" }}},
{id: 2,
mealsPerWeek: { Monday: {id: 3,name: "Salad",},
Tuesday: {id: 2,name: "Fishburger"}}}];
document.getElementById('cont').innerHTML=arr.map(h=>
`<h1>ID: ${h.id}</h1><ul>`
+Object.entries(h.mealsPerWeek).map(([day,{name}])=>
`<li>${day}: ${name}</li>`).join('\n')+'</ul>').join('\n')
<div id="cont"></div>
让我知道这对您是否有价值?
一些解释:
JSON.stringfy()
。 arr[0].mealsPerWeek.Monday.name
应该直接为您提供“汉堡”值。Object.entries(obj)
将返回一个数组数组。每个子数组将包含对象obj
.map(([day,{name}])=>...
的参数列表中使用了ES6解构。这样,我可以直接访问键为day
,而餐点名称的值对象为name
。答案 1 :(得分:0)
要提取每星期的餐点: 您只需添加以下行:
this.mealPlans.forEach((mealPlan)={
mealPlan.meals = Object.keys(mealPlan.mealsPerWeek)
})
然后您可以为内容添加以下内容:
let content = ''
essensplan.forEach(mealplan => {
content += '<h1>' + mealplan.id + '</h1>' + '<ul>' +
'<li>' + JSON.stringify(mealplan.mealsPerWeek[mealPlan.meals[0]]) +'</li>' +
}); + '</ul>'
您还已经知道如何为mealPlan.meals
添加for循环。