从 Lodash 中的 JSON 的多个嵌套集合中提取项目

Pull items from multiple nested collections from JSON in Lodash

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

如何遍历每个嵌套集合?

[
   {
      "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
   },
   ...
]

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 是您的对象

实现此功能的一种方法是

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>