我有一些json数据如下所示:
var data = {
Allergens: [{
Id: 10,
Label: 'Label 1',
IconUrl: 'http://www.xyz.de/hello.png'
}, {
Id: 12,
Label: 'Label 2',
IconUrl: 'http://www.xyz.de/cu.png'
}
],
Day: {
Items: [{
AllergenIds: [10, 12],
ExternalName: [{
lang: 'de-DE',
val: 'Ice Cream Vanilla (item 1)'
}]
}, {
AllergenIds: [10],
ExternalName: [{
lang: 'de-DE',
val: 'Ice Cream Strawberry (item 2)'
}]
}]
}
};
让我说我在我的物品上做了一个淘汰赛。
每个项目都有一个AllergenIds
列表。
对于这些AllergenIds,我想再渲染另一个包含相关Allergens
项目的信息/内容。
有没有办法将这些过敏原反应到相应的过敏原项目?所以,我的愿望是当我编辑过敏原时,所有Items.Allergens都会更新!?
答案 0 :(得分:2)
您需要能够Allergens
查找Id
,因此我首先要创建一个"索引"可以在以后使用
var allergenIndex = data.Allergens.reduce(function(prev,curr){
prev[curr.Id] = curr;
return prev;
},{});
然后当您遍历Day.Items
阵列时,您可以找到每种过敏原的具体细节:
data.Day.Items.forEach(function(i){
console.log(i.ExternalName[0].val)
i.AllergenIds.forEach(function(a){
console.log("\tAllergen=" + allergenIndex[a].Label)
});
});
输出是:
Ice Cream Vanilla (item 1) Allergen=Label 1 Allergen=Label 2 Ice Cream Strawberry (item 2) Allergen=Label 1
希望您可以根据需要使用它转换为淘汰赛。