2017-05-17 56 views
0

我正在使用Lodash將一個JSON結構轉換爲另一個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 
    }, 
    ... 
] 

回答

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是你的對象acehive這個

+0

愛這個解決方案。現在完全掌握了這種模式。 – CodeCabbie

1

的方法之一是

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>