如何根据动态生成的查询过滤json?

时间:2017-08-18 07:09:40

标签: javascript angularjs json

我想使用js为角度项目过滤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。

已经看过自定义函数进行过滤,但不知道如何根据生成的查询创建动态过滤函数。

2 个答案:

答案 0 :(得分:1)

您可以使用自定义过滤器(如果您不想使用查询构建器)过滤掉基于FirstName和LastName的所有值



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>
&#13;
&#13;
&#13;

答案 1 :(得分: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'
                },
            ]
        }
    ]
}
相关问题