2017-06-15 6 views
0

テンプレート作成中に、配列の値が同じかどうかを確認する方法は? 配列に重複した値がある場合、私はスキップしたいと思います。dustjs、ループ中の重複チェック

[ 
    {name: 1}, 
    {name: 3}, 
    {name: 3}, 
    {name: 4} 
] 

ループ上には基本的にはありません。ありがとう

答えて

1

一般的に、ダストは、テンプレートのデータについての論理を保持するという考え方に従います。レンダリングする前にデータを調整する必要がある場合は、データを渡すヘルパー関数を記述できます。ここではLodashのuniqByを使ってこれを行う例を示します。

コンテキスト

{ 
    yourArray: [{name: 1}, {name: 3}, {name: 3}, {name: 4}], 
    unique: function(chunk, context, bodies, {values, by}) { 
    const uniqueValues = _.uniqBy(values, by); 
    return chunk.section(uniqueValues, context, bodies); 
    } 
} 

テンプレート

{#unique values=yourArray by="name"} 
    {name}{~n} 
{/unique} 

この例では、私はフィルタリングする2つのパラメータを受け付けるコンテキストヘルパーunique、アレイ及びフィルタリングするためのキーを定義しました。

私は_.uniqByを呼び出して配列をフィルタリングし、を使用して、ブロックごとにuniqueValuesのブロックを1回レンダリングします。

次に、テンプレートで、私はコンテキストヘルパー{#unique}を呼び出し、それにパラメータを渡します。

+0

これは素晴らしいです。私はヘルパーを実行することができたが、私はロダシを持っていない。可能であれば、あなたがvanillajsの実装を助けることができれば、それは素晴らしいことです。私は脱分化の部分に混乱しています。 – serkan

+0

また、「エラー:ReferenceError:paramsが定義されていません」というエラーが表示されます。 – serkan

+0

編集済み。 'chunk.section'呼び出しから' params'を削除するだけです。私はparamsを{{値、by}}に分解し、他の用途を変更するのを忘れました。 – Interrobang

関連する問題