2017-06-15 65 views
0

模板化時,檢查數組是否具有相同值的方法是什麼? 如果數組有重複值,我想跳過。dustjs,循環時重複檢查

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

基本上模擬1,3,4循環。謝謝

回答

1

一般來說,Dust遵循一種理念,您應該將模板中的數據保持邏輯。如果您在渲染數據之前需要調整數據,則可以編寫一個輔助函數來傳遞數據。這是一個使用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} 

在本例中,我已經定義的上下文輔助unique接受兩個參數,陣列過濾和過濾的關鍵通過。

我打電話給_.uniqBy來過濾數組,然後使用chunk.sectionuniqueValues中的每個值呈現我的塊一次。

然後,在模板中,我打電話給我的上下文助手{#unique}並將其傳遞給參數。

+0

這太好了。我能夠運行幫手,但我沒有洛達什。如果可能的話,如果你可以幫助vanillajs的實施,這將是非常好的。我對解構部分感到困惑。 – serkan

+0

此外,我得到「錯誤:ReferenceError:params未定義」錯誤。 – serkan

+0

已編輯;只需從'chunk.section'調用中移除'params'即可。我將參數分解成{{values,by}},並忘記改變其他用法。 – Interrobang