2016-07-25 218 views
0

v-のループの出力で重複した値を削除または除外します。したがって、 'John'は出力に2回表示される代わりに1回だけ表示されます。それは可能ですvuejsvuejsのv-forループの出力に重複する値を避ける方法

JS

var app = new Vue({ 
      el: "#app", 
      data: function() { 
        return { 
         searchFields: ['number', 'name'], 
         search: '', 
         items: [ 
           { name: 'Mary'}, 
           { name: 'John'}, 
           { name: 'John'}, 
           { name: 'William'} 
          ] 
         }; 
      } 
}); 

Codepen

答えて

1

Vuejs filterByはフィルタ機能に3つの引数を提供するために十分:現在の項目の値が、インデックスを項目と配列全体のVuejsガイドにより示唆されるように、私は、計算された値を使用

methods: { 
     myFilter: function (val, idx, arr) { 
      for(var i = 0; i < idx; i++) { 
      if(arr[i].name === val.name) { 
       return false; 
      } 
      } 
      return true; 
     } 
     } 
+0

優れたソリューションマン...これは、上記のものよりもさらに完璧です...私はこの場合には一時的な配列を必要としないため....簡単な素晴らしいソリューション...ありがとう@himmet avsar ...チアーズ!! 1 –

2

だからfilters-documentationをチェックすることによって、あなたがあなた自身のカスタムフィルタを書くことができることがわかります。

したがって、myFilterを持つことで、メソッドに含めるものを定義できます。

v-for="item in items | filterBy myFilter"> 

は今、何かこのようにそれが必要メソッドを追加:これは何

let arr = []; 

var app = new Vue({ 
    el: "#app", 
    data: function() { 
    return { 
     searchFields: ['number', 'name'], 
     search: '', 
     items: [ 
     { name: 'Mary'}, 
     { name: 'John'}, 
     { name: 'John'}, 
     { name: 'William'} 
     ] 
    }; 
    }, 
    // this is where your filter method is defined 
    methods: { 
    myFilter: function(val) { 
     if(arr.indexOf(val.name) === -1) { 
     arr.push(val.name); 
     return val.name; 
     } 
    } 
    } 
}); 

は、あなたの価値があなたの配列arrであるかどうかをチェックします。そうでない場合は、アレイに追加して、後で重複して表示されるのを防ぎます。

item.nameがまだ表示されていない場合のみ、フィルタは名前をビューに返します。

Check it out

*たぶん、これまでよりよい/容易な解決策があるが、今:)

+0

ちょっと@マーキングしていましたか?あなたのペンは動作していません!それは出力に{{item.name}}を表示しています...チェックしてください。 –

+0

あなたはどういう意味ですか?私がペンを開くと、4の代わりに3つの名前が表示されます。それは私のために働いています.Sはおそらく私が得ていない他のエラーがありますか? – MMachinegun

+1

検索シームが機能していません。私はちょっと後で見ていきます – MMachinegun

関連する問題