仅从数组中包含的特定键的 JSON 数据中获取值
Get values from JSON data only of specific keys contained in an array
我正在尝试在 Javascript 中建立一个 Table 的营养价值、数量和每日百分比。
我用这种方式保存了 JSON 数据:
data : [
{
"recipe": {
"totalNutrients": {
"ENERC_KCAL": {
"label": "Energy",
"quantity": 122.67497750000001,
"unit": "kcal"
},
"K": {
"label": "Potassium",
"quantity": 255.9084202548212,
"unit": "mg"
},
"FAT": {
"label": "Fat",
"quantity": 11.89368915,
"unit": "g"
},
"ZN": {
"label": "Zinc",
"quantity": 0.328366321935265,
"unit": "mg"
},
"FIBTG": {
"label": "Fiber",
"quantity": 3.609618250000001,
"unit": "g"
},
"SUGAR": {
"label": "Sugars",
"quantity": 0.5078356,
"unit": "g"
}
}
}
}]
我想从 JSON 数据中获取 ENERC_KCAL、FAT 和数组“KEYS”中的其他值。
keys = ['ENERC_KCAL', 'FAT', 'CHOCDF', 'FITBG', 'SUGAR', 'PROCNT', 'CHOLE', 'NA'];
valNut = data[0].recipe.totalNutrients;
有没有办法完成以下指令:
energyValue = valNut.ENERC_KCAL.quantity + ' ' + valNut.ENERC_KCAL.unit
在循环中使用数组的值?
for(h=0; h<keys.length; h++){
energyValue = valNut.keys[h].quantity + ' ' + valNut.keys[h].unit
}
P.S。对不起英语不好。
要执行您需要的操作,您可以使用 map()
遍历 keys
来构建匹配的 totalNutrients
键对象的新数组。像这样:
let data = [{recipe:{totalNutrients:{ENERC_KCAL:{label:"Energy",quantity:122.67497750000001,unit:"kcal"},K:{label:"Potassium",quantity:255.9084202548212,unit:"mg"},FAT:{label:"Fat",quantity:11.89368915,unit:"g"},ZN:{label:"Zinc",quantity:.328366321935265,unit:"mg"},FIBTG:{label:"Fiber",quantity:3.609618250000001,unit:"g"},SUGAR:{label:"Sugars",quantity:.5078356,unit:"g"}}}}];
let keys = ['ENERC_KCAL', 'FAT', 'CHOCDF', 'FITBG', 'SUGAR', 'PROCNT', 'CHOLE', 'NA'];
let filteredNutrientData = keys.map(key => data[0].recipe.totalNutrients[key]).filter(v => v);
console.log(filteredNutrientData);
请注意,最后的 .filter(v => v)
是删除在 totalNutrients
对象中搜索 non-existent 键得到的 undefined
值。
我正在尝试在 Javascript 中建立一个 Table 的营养价值、数量和每日百分比。 我用这种方式保存了 JSON 数据:
data : [
{
"recipe": {
"totalNutrients": {
"ENERC_KCAL": {
"label": "Energy",
"quantity": 122.67497750000001,
"unit": "kcal"
},
"K": {
"label": "Potassium",
"quantity": 255.9084202548212,
"unit": "mg"
},
"FAT": {
"label": "Fat",
"quantity": 11.89368915,
"unit": "g"
},
"ZN": {
"label": "Zinc",
"quantity": 0.328366321935265,
"unit": "mg"
},
"FIBTG": {
"label": "Fiber",
"quantity": 3.609618250000001,
"unit": "g"
},
"SUGAR": {
"label": "Sugars",
"quantity": 0.5078356,
"unit": "g"
}
}
}
}]
我想从 JSON 数据中获取 ENERC_KCAL、FAT 和数组“KEYS”中的其他值。
keys = ['ENERC_KCAL', 'FAT', 'CHOCDF', 'FITBG', 'SUGAR', 'PROCNT', 'CHOLE', 'NA'];
valNut = data[0].recipe.totalNutrients;
有没有办法完成以下指令:
energyValue = valNut.ENERC_KCAL.quantity + ' ' + valNut.ENERC_KCAL.unit
在循环中使用数组的值?
for(h=0; h<keys.length; h++){
energyValue = valNut.keys[h].quantity + ' ' + valNut.keys[h].unit
}
P.S。对不起英语不好。
要执行您需要的操作,您可以使用 map()
遍历 keys
来构建匹配的 totalNutrients
键对象的新数组。像这样:
let data = [{recipe:{totalNutrients:{ENERC_KCAL:{label:"Energy",quantity:122.67497750000001,unit:"kcal"},K:{label:"Potassium",quantity:255.9084202548212,unit:"mg"},FAT:{label:"Fat",quantity:11.89368915,unit:"g"},ZN:{label:"Zinc",quantity:.328366321935265,unit:"mg"},FIBTG:{label:"Fiber",quantity:3.609618250000001,unit:"g"},SUGAR:{label:"Sugars",quantity:.5078356,unit:"g"}}}}];
let keys = ['ENERC_KCAL', 'FAT', 'CHOCDF', 'FITBG', 'SUGAR', 'PROCNT', 'CHOLE', 'NA'];
let filteredNutrientData = keys.map(key => data[0].recipe.totalNutrients[key]).filter(v => v);
console.log(filteredNutrientData);
请注意,最后的 .filter(v => v)
是删除在 totalNutrients
对象中搜索 non-existent 键得到的 undefined
值。