我正在使用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>