微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从营养信息中提取来自美国农业部 API 的“能量”

如何解决从营养信息中提取来自美国农业部 API 的“能量”

我正在尝试从 USDA API 中提取“能源”,如下面的控制台日志所示。

0: {nutrient: {…},type: "FoodNutrient"}
1: {type: "FoodNutrient",nutrient: {…},foodNutrientDerivation: {…},id: 1837207,amount: 87.58,…}
2:
amount: 39
dataPoints: 0
foodNutrientDerivation: {id: 49,code: "NC",description: "Calculated",foodNutrientSource: {…}}
id: 1837206
nutrient: {id: 1008,number: "208",name: "Energy",rank: 300,unitName: "kcal"}
type: "FoodNutrient"
proto: Object

这是我的CalculateNutritionInfo函数

CalculateNutritionInfo = () => {
let meals = ["Breakfast","Lunch","Dinner","Snacks"];
let { reports } = this.state;
let nutrient = {};
meals.forEach((meal) => {
  this.state[meal].forEach((item) => {
    nutrient = this.FillNutrients(
      nutrient,reports[item.foodNutrients],item.servings
    );
    console.log(reports[item.foodNutrients]);
  });
});
console.log(nutrient);
let nutrientList = Object.keys(nutrient).map((item) => nutrient[item]);
console.log(nutrientList);
let empty = nutrientList.length === 0 ? true : false;
this.setState({
  calories: empty ? 0 : nutrient["Energy"].amount,protein: empty ? 0 : nutrient["Protein"].value,fat: empty ? 0 : nutrient["Total lipid (fat)"].value,carbs: empty ? 0 : nutrient["Carbohydrate,by difference"].value,nutrientList,});

};

这是我的 FetchReports 函数

  FetchReports = () => {
let uri = encodeURI(
  `https://api.nal.usda.gov/fdc/v1/foods?api_key=[my_key]${this.state.ndbno_list}`
);
fetch(uri,{
  mode: "cors",})
  .then((res) => res.json())
  .then((data) => {
    let reports = {};
    data.forEach((item) => {
      reports[item.foodNutrients.nutrient] = item.foodNutrients;
    });
    this.setState(
      {
        reports,},function () {
        this.CalculateNutritionInfo();
      }
    );
  });

};

这是我的 FillNutrients 功能

  FillNutrients = (nutrients,foodNutrients,servings) => {
foodNutrients.forEach((nutrient) => {
  let { name,amount,unitName } = nutrient;
  servings = parseFloat(servings);
  servings = isNaN(servings) ? 0 : servings;
  let newValue = Math.round(parseFloat(amount) * servings);
  if (nutrients[name]) {
    nutrients[name].name = nutrient.nutrient.name;
    nutrients[name].amount = nutrient.amount;
    nutrients[name].unitName = nutrient.nutrient.unitName;
  } else {
    nutrients[name] = {
      name,amount: newValue,unitName,};
  }
});
return nutrients;

};

到目前为止,我只能获取数组中的最后一个营养素。我的营养列表被覆盖,我不知道为什么。我将不胜感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。