【问题标题】:map over complex javascript array of objects to get values映射复杂的javascript对象数组以获取值
【发布时间】:2020-08-16 16:49:41
【问题描述】:

我有一个大文件,其中显示了一个虚拟食谱的营养数据。

先看codeandbox json

我想得到这个对象的总热量和营养成分;

recipe 有一个 stuffs 数组,在 stuffs 数组中我们有 2 个 item 对象;

每个项目都有事实(facts);

事实是(维生素、营养、卡路里和其他)

每个事实都有价值;

我尝试了许多嵌套的 array.map 高阶函数,例如我得到了每个项目的卡路里,但问题是嵌套的 map 函数将每个卡路里值返回到一个单独的数组中......

我想将每个项目(食谱项目)的值推送到这样的数组中:

const vitaminValues = []
const nutritionValues = []
const caloriesValues = []
const othersValues = []

如果我得到这个,我可以获得总卡路里、维生素、营养和其他信息

但是 idk,如果你们有更好的想法,请帮助我:) 谢谢

这是示例配方的 JSON 文件:https://codesandbox.io/s/relaxed-brown-zrxnr?fontsize=14&hidenavigation=1&theme=dark

【问题讨论】:

  • flatMap 是你的朋友。在您认真尝试之前,我不会多说
  • 请提及您想要的输出
  • @SohanPatil,正如我所说,我想计算并获得食谱中所有物质的卡路里、营养、维生素和其他物质的总和
  • 能否提供样本输出
  • @SohanPatil,我说

标签: javascript json dictionary object


【解决方案1】:
let data=//your json
let vitaminValues = [];
let nutritionValues = [];
let caloriesValues = [];
let othersValues = [];
let vitaminAValues = [];

function getValuesFromJson(obj, Arr) {
  Object.entries(obj).map(
    vitamin => vitamin[1].hasOwnProperty("value") && Arr.push(vitamin[1].value)
  );
}
data.map(d =>
  d.stuffs.map(stuff =>
    stuff.item.fact.map(f => {
      getValuesFromJson(f.vitamins, vitaminValues);
      getValuesFromJson(f.others, othersValues);
      caloriesValues.push(f.calories);
      f.nutritions.map(nutri => getValuesFromJson(nutri, nutritionValues));
      vitaminAValues.push(f.vitamins.A.value);
    })
  )
);
console.log("vitaminValues", vitaminValues);
console.log("nutritionValues", nutritionValues);
console.log("othersValues", othersValues);
console.log("caloriesValues", caloriesValues);
console.log("vitaminAValues", vitaminAValues);

【讨论】:

  • 感谢它运行良好!
  • 维生素A_values = []维生素C_values = []维生素D_values = []维生素B6_values = []钙值=[]铁值=[]钴胺素值=[]镁值=[]
  • 脂肪值 = [] 胆固醇值 = [] 钠值 = [] 钾值 = [] 碳水化合物值 = [] 蛋白质值 = []
  • @tafhim 我已经编辑了将值添加到 vitaminAValues 数组的代码,您可以对其他维生素重复同样的操作
猜你喜欢
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多