2017-05-12 21 views
2

私はJSON形式で外部APIからデータを取得し、そのデータを私のビューに送信しています。私が持っている問題は、オブジェクト内のプロパティの1つはオブジェクトの配列です。パグのドキュメント(Pug Iteration)に続いて、私は成功しそうのような配列を反復処理することができます。Pugの配列を反復する

block content 
    .row 
    each item in data.array 
     .col-md-3 
     .well 
      img(src=`${item.media.m}`) 
      h5 #{item.title} 
      p by #{item.author} 

しかし、アレイの店舗は20個の値と、私は達成することができますので、理想的に、私は一度に4つの値を反復したいと思います次の出力:

<div class="row"> 
    <div class="col-md-3"> 
    <div class="well"> 
     <img src="https://localhost/frank_the_pug.jpg"> 
     <h5>Frank the Pug</h5> 
     <p>by MIB</p> 
    </div> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-md-3"> 
    <div class="well"> 
     <img src="https://localhost/frank_the_pug2.jpg"> 
     <h5>Frank the Pug 2</h5> 
     <p>by MIB</p> 
    </div> 
    </div> 
</div> 

EDIT:

JSON構造

{ 
    "string": "string", 
    "string": "string", 
    "array": [ 
    { 
     "string": "string", 
     "media": { 
     "m": "string" 
     } 
    }, 
    { 
     "string": "string", 
     "media": { 
     "m": "string" 
     } 
    } 
    ] 
} 
+0

のアイテムを最初のグループの項目は、あなたはおそらくループは再び、または多分変更する必要がありますすることができ

あなたのデータをフォーマットする方法は、おそらくあなたのデータ構造を表示できますか? –

+0

こんにちはFabian、あなたは正しく、 '.row' divを出力する前に何とかループする必要があるので、' .col-md-3 divs 'を使って '.row' divを出力することができます。それについてどうやって行きますか? – Tom25

答えて

0
あなたは私はあなたの問題を理解することができますのようにグループを反復処理するために、2つのネストされたループを使用して4により、およびグループ限り
- const groupBy4 = arr => arr.reduce((acc, item) => { 
- let last = acc[acc.length - 1] 
- if(last.length === 4) { 
-  acc.push(last = []); 
- } 
- last.push(item) 
- return acc; 
- }, [[]]) 

each group in groupBy4(items) 
    .row 
    each item in group 
     .col-md-3 
     .well 
      img(src=item.media.m) 
      h5 #{item.title} 
      p by #{item.author} 
+0

ありがとう、ユリー。これは、別のファイルでgroupBy4()関数を持って、それを私たちのpugテンプレートに含めるという点でベストプラクティスになるでしょうか? – Tom25

+0

あなたは別のファイルからそれを要求することで地方の機能を渡すことができます。 –