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



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

如何循环访问每个嵌套集合?

[
   {
      "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>

最新更新