仅从数组中包含的特定键的 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 值。