簡體   English   中英

Lodash 將對象數組轉換為數組

[英]Lodash Transform array of objects to array

我有這樣的對象數組:

[ { season: 1,
    episodes:
     [ 
       {
        title:'ep1 title',
        season:1,
       },
       {
        title:'ep2 title',
        season:1,
       },
       {
        title:'ep3 title',
        season:1,
       }] },
  { season: 2,
    episodes:
     [ {
        title:'ep1 title',
        season:2,
       },
       {
        title:'ep2 title',
        season:2,
       },
       {
        title:'ep3 title',
        season:2,
       } ] },
  { season: 3,
    episodes:
     [ {
        title:'ep1 title',
        season:3,
       },
       {
        title:'ep2 title',
        season:3,
       },
       {
        title:'ep3 title',
        season:3,
       } ] },
]

我想用 loadsh 把它變成這樣的數組:

[
  {
    title:'ep1 title',
    season:1,
  },
  {
    title:'ep2 title',
    season:1,
  },
  {
    title:'ep3 title',
    season:1,
  },
  {
    title:'ep1 title',
    season:2,
  },
  {
    title:'ep2 title',
    season:2,
  },
  {
    title:'ep3 title',
    season:2,
  },
  {
    title:'ep1 title',
    season:3,
  },
  {
    title:'ep2 title',
    season:3,
  },
  {
    title:'ep3 title',
    season:3,
  }
]

我只是想使用 lodash 將劇集轉換為對象如何使用 lodash 將兩個數組合並為一個對象

如果它真的必須是 lodash,你可以使用_.flatMap

var flat = _.flatMap(data, 'episodes');

 var data = [ { season: 1, episodes:[{title:'ep1 title',season:1,},{title:'ep2 title',season:1,},{title:'ep3 title',season:1,}] },{ season: 2,episodes:[ {title:'ep1 title',season:2,},{title:'ep2 title',season:2,},{title:'ep3 title',season:2,} ] },{ season: 3,episodes:[ {title:'ep1 title',season:3,},{title:'ep2 title',season:3,},{title:'ep3 title',season:3,} ] },]; var flat = _.flatMap(data, 'episodes'); console.log(flat);
 .as-console-wrapper { max-height: 100% !important; top: 0; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

但是 JavaScript 從 EcmaScript 2019 開始有了自己的flatMap ,所以你可以這樣做:

var flat = data.flatMap( o => o.episodes );

 var data = [ { season: 1, episodes:[{title:'ep1 title',season:1,},{title:'ep2 title',season:1,},{title:'ep3 title',season:1,}] },{ season: 2,episodes:[ {title:'ep1 title',season:2,},{title:'ep2 title',season:2,},{title:'ep3 title',season:2,} ] },{ season: 3,episodes:[ {title:'ep1 title',season:3,},{title:'ep2 title',season:3,},{title:'ep3 title',season:3,} ] },]; var flat = data.flatMap( o => o.episodes ); console.log(flat);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

如果flatMap不可用,您可以使用:

var flat = [].concat(...data.map( o => o.episodes ));

 var data = [ { season: 1, episodes:[{title:'ep1 title',season:1,},{title:'ep2 title',season:1,},{title:'ep3 title',season:1,}] },{ season: 2,episodes:[ {title:'ep1 title',season:2,},{title:'ep2 title',season:2,},{title:'ep3 title',season:2,} ] },{ season: 3,episodes:[ {title:'ep1 title',season:3,},{title:'ep2 title',season:3,},{title:'ep3 title',season:3,} ] },]; var flat = [].concat(...data.map( o => o.episodes )); console.log(flat);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

無需使用任何特殊的 lodash 函數 - 這可以使用基本的 javascript 數組.reduce()輕松完成,如下所示:

 var oldArr = [{ season: 1, episodes: [{ title: 'ep1 title', season: 1, }, { title: 'ep2 title', season: 1, }, { title: 'ep3 title', season: 1, } ] }, { season: 2, episodes: [{ title: 'ep1 title', season: 2, }, { title: 'ep2 title', season: 2, }, { title: 'ep3 title', season: 2, } ] }, { season: 3, episodes: [{ title: 'ep1 title', season: 3, }, { title: 'ep2 title', season: 3, }, { title: 'ep3 title', season: 3, } ] }, ] var newArr = oldArr.reduce(function(result, current) { return result.concat(current.episodes); }, []); console.log(newArr);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM