2017-08-18 14 views
-1

角度プロジェクトのjsを使ってjsonオブジェクトをフィルタリングしたいと思います。 JSON構造は次のようになります:動的に生成されたクエリに基づいてjsonをフィルタリングする方法はありますか?

{ 
"docs": [ 
{ 
    "Firstname": "", 
    "Lastname": "", 
    "Birthdate": "", 
    "city": "", 
    "country": "" 
}, 
{ 
    "Firstname": "", 
    "Lastname": "", 
    "Birthdate": "", 
    "city": "", 
    "country": "" 
} 
] 
} 

クエリビルダは、angular-query-builder

次のようにのようなものになり、クエリビルダを使用して生成することができ、サンプルクエリに似ています

(Firstname = tom OR (Firstname = jerry AND Lastname = jack)) 

このクエリに基づいて、Js関数はjsonオブジェクトをフィルタリングし、結果として生じるjsonをコンソール化する必要があります。

フィルタリングのカスタム関数を見たことがありますが、生成されるクエリに基づいて動的フィルタリング関数を作成する方法はわかりません。 (クエリビルダを使用しない場合)

+4

述語のためのオブジェクトを取るので、あなたは何を試してみましたか? – Marv

+1

ドキュメントを読んでみてください。 https://www.npmjs.com/package/angular-query-builder –

+1

'' docs ''配列をフィルタリングしますか?その場合は、JavaScriptの配列フィルタ関数を使用するだけで済みます。しかし、たぶん、あなたが試したこと、そしてあなたが遭遇したエラー/問題を示す必要もあります。 – ishmaelMakitla

答えて

1

あなたはあなたが使用することができ

function MyCtrl($scope){ 
 
    $scope.people = { 
 
"docs": [ 
 
{ 
 
    "Firstname": "Tom", 
 
    "Lastname": "Larry", 
 
    "Birthdate": "", 
 
    "city": "", 
 
    "country": "" 
 
}, 
 
{ 
 
    "Firstname": "jerry", 
 
    "Lastname": "jack", 
 
    "Birthdate": "", 
 
    "city": "", 
 
    "country": "" 
 
}, 
 
{ 
 
    "Firstname": "Tom", 
 
    "Lastname": "Thomas", 
 
    "Birthdate": "", 
 
    "city": "", 
 
    "country": "" 
 
}, 
 
{ 
 
    "Firstname": "jerry", 
 
    "Lastname": "gaer", 
 
    "Birthdate": "", 
 
    "city": "", 
 
    "country": "" 
 
} 
 
] 
 
} 
 
    $scope.myFilter = function(item){ 
 
     if((item.Firstname == "Tom")||(item.Firstname == "jerry"&&item.Lastname == "jack")){ 
 
      return true; 
 
     } 
 
    }; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app> 
 
    <div ng-controller="MyCtrl"> 
 
     <ul> 
 
      <li ng-repeat="person in people.docs | filter:myFilter"> 
 
{{person.Firstname}} {{person.Lastname}} 
 
      </li> 
 
     </ul> 
 
    </div> 
 
</div>

+0

あらかじめ決められたクワリー。これで十分です。しかし、Anular-Querry Builderのように動的に生成されるクエリはどうでしょうか?どのように動的にフィルタリングできますか? –

+0

私は匿名クエリビルダを知っていませんが、あなたの質問から質問(Firstname = tom OR(Firstname = jerry AND Lastname = jack))は私にあらかじめ感じています – Vivz

+0

実際にはquerryを使用して生成できるサンプルquerryでしたビルダー。 –

1

、姓と名に基づいてすべての値をフィルタリングするには、カスタムフィルタを使用することができますオブジェクトは、条件とそのグループ化の関係を反映しています。

与えられた条件のため

(Firstname = tom OR (Firstname = jerry AND Lastname = jack)) 

{ 
    type: 'group', 
    operator: 'OR', 
    conditions: [ 
     { 
      type: 'expression', 
      key: 'Firstname', 
      value: 'tom', 
      comparison: '=' 
     }, 
     { 
      type: 'group', 
      operator: 'AND', 
      conditions: [ 
       { 
        type: 'expression', 
        key: 'Firstname', 
        value: 'jerry', 
        comparison: '=' 
       }, 
       { 
        type: 'expression', 
        key: 'Firstname', 
        value: 'jack', 
        comparison: 'jack' 
       }, 
      ] 
     } 
    ] 
} 
関連する問題