javascript - Lodash 从嵌套对象中提取值

标签 javascript lodash extract

我有以下对象,我当前正在循环该对象以获取项目值。目前我正在使用 lodash _.forEach 来实现这一点。我不确定创建一个以项目名称作为键、以值作为值的新对象的最佳方式是什么。

data =  [
  {
     "panels" : [
        {
          "title": "Panel 1",
          "items" : [
              {
                 "name": item1,
                 "value": 1
              }
              {
                 "name": item2,
                 "value": 2
              }
           ]
         },
         {
            "title": "Panel 2",
             "items" : [
              {
                 "name": item3,
                 "value": 3
              }
              {
                 "name": item4,
                 "value": 5
              }
           ]
         }
     ]
  }

  {
     "panels" : [
        {
          "title": "Panel 3"
          "items" : [
              {
                 "name": item5,
                 "value": 5
              }
              {
                 "name": item6,
                 "value": 6
              }
           ]
        }
     ]
  }  
]

  let values = [];
    _.forEach(data, (groups) => {
        _.forEach(groups.panels, (panel) => {
            _.forEach(panel.items, (item) => {
                  values[item.name] = item.value;                   
            });
        });
    });
    return values;

还有其他方法可以更有效地实现这一目标吗?

最佳答案

您可以使用嵌套的 for...of循环 destructuring

const data=[{panels:[{title:"Panel 1",items:[{name:"item1",value:1},{name:"item2",value:2}]},{title:"Panel 2",items:[{name:"item3",value:3},{name:"item4",value:5}]}]},{panels:[{title:"Panel 3",items:[{name:"item5",value:5},{name:"item6",value:6}]}]}];

const output = {};

for (const { panels } of data)
  for (const { items } of panels)
    for (const { name, value } of items)
      output[name] = value;

console.log(output)

或者,

您可以使用链接的 flatMap获取一系列项目。然后减少项目数组以获取一个以name为键、以value为值的对象

const data=[{panels:[{title:"Panel 1",items:[{name:"item1",value:1},{name:"item2",value:2}]},{title:"Panel 2",items:[{name:"item3",value:3},{name:"item4",value:5}]}]},{panels:[{title:"Panel 3",items:[{name:"item5",value:5},{name:"item6",value:6}]}]}];

const output = data.flatMap(o => o.panels)
                   .flatMap(p => p.items)
                   .reduce((acc, o) => ({ ...acc, [o.name]: o.value }), {})

console.log(output)

关于javascript - Lodash 从嵌套对象中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59086435/

相关文章:

javascript - 使用 RadButton 关闭 RadWindow

python - 如何使用 python 提取文件夹中的所有 .zip 扩展名而不保留目录?

php - 如何使用 PHP 提取 HTML 输入标签的值

javascript - 迭代给定参数的方法

haskell - 如何从记录haskell中提取多个值

javascript - 根据其他数组的内容创建一个对象数组 "complete"

c# - 如何使用 javascript 或 php 将文件下载为字符串以进行速度测试?

javascript - 与桌面浏览器兼容的 HTML5 移动框架

javascript - 我可以使一个变量的值取决于另一个变量的更改(有时在延迟后)吗?

javascript - 通过字符串查找键来查找对象属性,如果为 true,则返回 true