2017-01-12 6 views
0

uniqueで配列をフィルタリングすることは可能ですか?これに代えて角度、2つのパラメータのユニークな組み合わせをフィルタで除外

<ion-item collection-repeat="item in data | unique:{'model'}"></ion-item> 

私は2つのパラメータの唯一のユニークな組み合わせをフィルタリングしたいと思います。たとえば

<ion-item collection-repeat="item in data | unique:{['brand','model']}"></ion-item> 

私は維持するために、フィルタを必要とする:

brand: 'Matta' model: 'gravy' 
brand: 'CI' model: 'gravy' 

それらの2つのうちの1つを削除する:

brand: 'Matta' model: 'gravy' 
brand: 'Matta' model: 'gravy' 

答えて

1

あなたはいつもパイプフィルターなので、これを試してみることができます。

<ion-item collection-repeat="item in data | unique:{'brand'} | unique:{'model'}"></ion-item> 

第1のフィルタは、第1の配列を受け取り、適用されるフィルタの配列を出力します。 2番目のフィルタは最初のフィルタの出力を使用し、同じ処理を行います。結果は両方のフィルターが適用された配列です。

EDIT:

app.filter('filterObj', filterObj); 

function filterObj() { 
    return function(collection, properties) { 
    var trace = []; 
    angular.forEach(collection, function(item) { 
     for (var i = 0; i < trace.length; i++) { 
     if (equalsPartial(item, trace[i], properties)) 
      return; 
     } 
     trace.push(item); 
    }); 
    return trace; 
    } 

    function equalsPartial(item,traceItem,properties){ 
     for (var j = 0; j < properties.length; j++) { 
      if (item[properties[j]] !== traceItem[properties[j]]) 
      return false; 
     } 
     return true; 
    } 
} 

そして、あなたはそれを使用します: は、あなたはこの1つのようなカスタムフィルタを使用することができますユニークな組み合わせを取得して達成するために

<ion-item collection-repeat="item in data | filterObj: ['brand','model']"></ion-item> 

フィルタがに項目を追加します新しい配列は、新しい配列にすでに同じプロパティを共有する項目が含まれているかどうかを確認した後、何もしない場合はそれを追加し、それ以外の場合は追加します。 equalsPartial関数を使用して別のフィルタに入れることもできます。

CodePen

+0

[OK]を感謝し、多分私は十分に明確ではありませんでした:私は唯一のユニークなペアブランド/モデルを取得するためにフィルタリングする必要があります...私はこのカスタム関数は、のために働くように思われる質問 – Louis

+0

グレートを編集しています私、ありがとうたくさん – Louis

+0

素晴らしい!どういたしまして! – Hiraqui

関連する問題