2017-12-17 13 views
1

以下に示すオブジェクト配列のすべてのリンクIDを抽出しようとしています。これは私がそれを得ようとしている方法です:ネストされたオブジェクト配列の値を抽出する方法は?

const linkIDs = array 
    .filter(d => d.links) 
    .map(d => d.links) 

しかし、これは私に欲しいものではない入れ子配列を与えます。

[ 
    { 
    "id: "1", 
    "links": [ 
     { 
      "id" : "Dn59y87PGhkJXpaiZ", 
      "type" : "article" 
     }, 
     { 
      "id" : "PGhkJXDn59y87paiZ", 
      "type" : "article" 
     } 
    ] 
    }, 
    { 
    "id: "2", 
    "links": [ 
     { 
      "id" : "GhkJXpaiZDn59y87P", 
      "type" : "article" 
     } 
    ] 
    }, 
    { 
    "id": "3" 
    } 
] 

したがって、この例では、私はあなたが各フィルタ項目がマップを()を使用して変換されlodashのflatMapを()、使用することができ、結果

[ "Dn59y87PGhkJXpaiZ", "PGhkJXDn59y87paiZ", "GhkJXpaiZDn59y87P" ] 

答えて

1

あなたは他のライブラリを使用せずに、怒鳴るように行うことができます。あなたがマッピングする前に、あなたの配列を生成する必要が

var data = [ 
 
    { 
 
    "id": "1", 
 
    "links": [ 
 
     { 
 
      "id" : "Dn59y87PGhkJXpaiZ", 
 
      "type" : "article" 
 
     }, 
 
     { 
 
      "id" : "PGhkJXDn59y87paiZ", 
 
      "type" : "article" 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    "id": "2", 
 
    "links": [ 
 
     { 
 
      "id" : "GhkJXpaiZDn59y87P", 
 
      "type" : "article" 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    "id": "3" 
 
    } 
 
]; 
 

 
var result = data.filter(e => e.links) 
 
       .map(e => e.links.map(link => link.id)) 
 
       .reduce((a, b) => a.concat(b), []); 
 
       
 
console.log(result);

0

を必要としています。

DEMO

var data = [ 
 
    { 
 
    "id": 1, 
 
    "links": [ 
 
     { 
 
     "id": "Dn59y87PGhkJXpaiZ", 
 
     "type": "article" 
 
     }, 
 
     { 
 
     "id": "PGhkJXDn59y87paiZ", 
 
     "type": "article" 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    "id": "2", 
 
    "links": [ 
 
     { 
 
     "id": "GhkJXpaiZDn59y87P", 
 
     "type": "article" 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    "id": "3" 
 
    } 
 
]; 
 
var result = _.flatMap(data, item => 
 
    _(item.links) 
 
    .map(v => (v.id)) 
 
    .value() 
 
); 
 
      
 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.12.0/lodash.js"></script>

+0

出力が異なり、また、別のLIBを使用する必要があります。 –

+0

@DanielTran更新、チェック – Sajeetharan

1

。 Jsの中Reduce非常に有用な機能である)

arr = [ 
 
    { 
 
    "id": "1", 
 
    "links": [ 
 
     { 
 
      "id" : "Dn59y87PGhkJXpaiZ", 
 
      "type" : "article" 
 
     }, 
 
     { 
 
      "id" : "PGhkJXDn59y87paiZ", 
 
      "type" : "article" 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    "id": "2", 
 
    "links": [ 
 
     { 
 
      "id" : "GhkJXpaiZDn59y87P", 
 
      "type" : "article" 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    "id": "3" 
 
    } 
 
]; 
 

 
var result = arr.filter(a=>a.links).reduce((acc, a) => { 
 
return acc.concat(a.links) 
 
}, []).map(a=>a.id); 
 
console.log(result);

関連する問題