Lodash从嵌套对象中提取值

问题描述 投票:0回答:1

我下面有一个对象,我正在遍历该对象以获取物品价值。目前,我正在使用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;

还有其他方法可以更有效地实现吗?

javascript lodash extract
1个回答
1
投票

您可以使用嵌套的for...of循环进行解构

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获取项目数组。然后flatMap items数组以reduce作为键且name作为其值的对象

value
© www.soinside.com 2019 - 2024. All rights reserved.