【问题标题】:Pull items from multiple nested collections from JSON in Lodash从 Lodash 中的 JSON 中提取多个嵌套集合中的项目
【发布时间】:2017-05-17 08:26:12
【问题描述】:

我正在使用 Lodash 将一种 JSON 结构转换为另一种。我需要从深度嵌套在 source 结构中的几个集合中提取所有项目。目标结构是“扁平化”版本。

如何遍历每个嵌套集合?

[
   {
      "regime": "Ground",
      "data": [
         { "name": AA },
         { "name": BB },
         { "name": CC }
      ]
   },
   {
      "regime": "Hover",
      "data": [
         { "name": DD },
         { "name": EE },
         { "name": FF }
      ]
   },       
   {
      "regime": "140 knots",
      "data": [
         { "name": GG },
         { "name": HH },
         { "name": II }
      ]
   }
]

目标 JSON 结构:

[
   {
      "regime": "Ground",
      "name": AA
   },
   {
      "regime": "Ground",
      "name": BB
   },
   {
      "regime": "Ground",
      "name": CC
   },
   {
      "regime": "Hover",
      "name": DD
   },
   {
      "regime": "Hover",
      "name": EE
   },
   {
      "regime": "Hover",
      "name": FF
   },
   {
      "regime": "140 knots",
      "name": GG
   },
   ...
]

【问题讨论】:

    标签: javascript json lodash map-function


    【解决方案1】:

    o = [
       {
          "regime": "Ground",
          "data": [
             { "name": 'AA' },
             { "name": 'BB' },
             { "name": 'CC' }
          ]
       },
       {
          "regime": "Hover",
          "data": [
             { "name": 'DD' },
             { "name": 'EE' },
             { "name": 'FF' }
          ]
       },       
       {
          "regime": "140 knots",
          "data": [
             { "name": 'GG' },
             { "name": 'HH' },
             { "name": 'II' }
          ]
       }
    ];
    
    newO = _(o).map((e)=> {
      return e.data.map((d)=> {
        return {
          regime: e.regime,
          name: d.name
        }
      })
    }).flatten().value();
    
    console.log(newO);
    <script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

    o 是你的对象

    【讨论】:

    • 喜欢这个解决方案。现在完全掌握了这个模式。
    【解决方案2】:

    实现这一目标的一种方法是

    var input = [
       {
          "regime": "Ground",
          "data": [
             { "name": "AA" },
             { "name": "BB" },
             { "name": "CC" }
          ]
       },
       {
          "regime": "Hover",
          "data": [
             { "name": "DD" },
             { "name": "EE" },
             { "name": "FF" }
          ]
       },       
       {
          "regime": "140 knots",
          "data": [
             { "name": "GG" },
             { "name": "HH" },
             { "name": "II" }
          ]
       }
    ];
    
    
    var result = _.flatten(_.map(input, function(it){
     return _.map(it.data, function(subIT){
       return { regime: it.regime, name: subIT.name};
     });
    }));
    
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

    【讨论】:

      猜你喜欢
      • 2016-05-16
      • 1970-01-01
      • 2018-03-06
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多