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

标签 javascript json dictionary object

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

先看codesandbox json

我想获取该物体的总热量和营养成分;

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

每一项都有事实(facts);

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

每个事实都有值(value);

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

我想将每个项目(食谱项目)的值推送到数组中,如下所示:

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

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

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

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

最佳答案

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);

关于javascript - 映射复杂的 JavaScript 对象数组以获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61555328/

相关文章:

javascript - TypeError : csv. fromPath 不是函数(将 csv 文件转换为 sha1 脚本)

javascript - 使用 Jest 测试时,componentWillUpdate 上的 nextState 不正确(还使用 react 路由器包装器)

json - 如何解析 JSON 输入

Python - 具有拆分选项输出差异的 map

javascript - 在 Angular 5 中从 .subscribe() 获取数据后如何调用函数

javascript - Highcharts:多系列柱形图中的位置散点图

c# - PowerShell 二进制模块程序集依赖性错误

c# - 返回空 Json 对象

c# - 基于方法名称和参数值的缓存键构造

c# - 如何有效地削减字典中的词条数量?