Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
映射复杂的javascript对象数组以获取值_Javascript_Json_Dictionary_Object - Fatal编程技术网

映射复杂的javascript对象数组以获取值

映射复杂的javascript对象数组以获取值,javascript,json,dictionary,object,Javascript,Json,Dictionary,Object,我有一个大文件,显示了一个虚拟配方的营养数据 首先查看代码沙盒json 我想得到这个物体的总热量和营养成分 配方有一个Stuff数组,在Stuff数组中我们有2个item对象 每一项都有事实 事实是(维生素、营养、卡路里和其他) 每个事实都有价值 我尝试了许多嵌套的array.map高阶函数,例如,我得到了每个项目的卡路里,但问题是嵌套的map函数在一个单独的数组中返回每个卡路里值 我想按如下方式在数组中推送每个项(配方材料项)的值: const vitaminValues = [] const

我有一个大文件,显示了一个虚拟配方的营养数据

首先查看代码沙盒json

我想得到这个物体的总热量和营养成分

配方有一个Stuff数组,在Stuff数组中我们有2个item对象

每一项都有事实

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

每个事实都有价值

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

我想按如下方式在数组中推送每个项(配方材料项)的值:

const vitaminValues = []
const nutritionValues = []
const caloriesValues = []
const othersValues = []
如果我得到这个,我可以得到总热量,维生素,营养和其他信息

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


这是样本配方的JSON文件:

flatMap
是您的朋友。我不会说更多,直到你提供你的认真尝试。请说明你想要什么样的输出this@SohanPatil,正如我所说的,我想计算并得到一个样本中所有和每种物质的卡路里、营养、维生素和其他的总和,你们可以提供样本吗output@SohanPatil,我说谢谢,效果很好!维生素A值=[]维生素C值=[]维生素D值=[]维生素B6值=]钙值=]铁值=]钴胺素值=]镁值=]脂肪值=]胆固醇值=]钠值=]钾值=]碳水化合物值=]蛋白质值=[]@tafhim我已经编辑了向
vitaminAValues
数组添加值的代码,您可以对其他维生素重复相同的操作
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);