Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 过滤JSON中的某些值_Javascript_Json - Fatal编程技术网

Javascript 过滤JSON中的某些值

Javascript 过滤JSON中的某些值,javascript,json,Javascript,Json,我有一个JSON对象,如下所示: var test = {"employees": [ {"name":"John","klasse":12,"fach":"BW"}, {"name":"max", "klasse":13,"fach":"E"}, {"name":"Stef","klasse":14,"fach":"D"}, {"name":"abc", "klasse":15,"fach":"AM"}, {"name":"def", "klasse"

我有一个JSON对象,如下所示:

 var test = {"employees": [
    {"name":"John","klasse":12,"fach":"BW"},
    {"name":"max", "klasse":13,"fach":"E"},
    {"name":"Stef","klasse":14,"fach":"D"},
    {"name":"abc", "klasse":15,"fach":"AM"},
    {"name":"def", "klasse":17,"fach":"AM"},
    {"name":"John","klasse":12,"fach":"D"}
]};
在我的HTML文件中,我有3个输入字段,它们应该给我在JSON对象中搜索的值

<form ng-controller="Suche">
    <span>Suchbegriff: </span><input type="text" ng-model="suchbegriff"> <br>
    <span>Klasse: </span><input type="text" ng-model="klasse"> <br>
    <span>Fach: </span><input type="text" ng-model="fach"> <br>

    <input type="submit" ng-click="submit()">

    <input type="submit" ng-click="sort()" value="Sort">

    <table>
        <tr>
            <td>Name</td>
            <td>Klasse</td>
            <td>Fach</td>
        </tr>

        <tr ng-repeat="result in results">
            <td>{{result.name}}</td>
            <td>{{result.klasse}}</td>
            <td>{{result.fach}}</td>
        </tr>

        <tr ng-hide="filter" ng-repeat="erg in json.employees">
            <td>{{erg.name}}</td>
            <td>{{erg.id}}</td>
            <td>{{erg.fach}}</td>
        </tr>

    </table>

这样的论坛:
克拉斯:
法赫:
名称 克拉斯 法赫 {{result.name} {{result.klasse}} {{result.fach} {{erg.name} {{erg.id} {{erg.fach}
现在是我的问题。例如,我想搜索名字“John”和fach“D”。 我当前的输出如下:

 $scope.submit = function () {
    $scope.results = [];

    var searchField = "name",
        searchField2 = "klasse",
        searchField3 = "fach";

    var search          = $scope.suchbegriff,
        search_class    = $scope.klasse,
        search_subject  = $scope.fach;

    var hasSearch          = !(search == null || search == ''),
        hasSearch_class    = !(search_class == null || search_class == ''),
        hasSearch_subject  = !(search_subject == null || search_subject == '');

    $scope.filter = hasSearch || hasSearch_class || search_subject;

    for (var i=0 ; i < test.employees.length ; i++) {
        if (
            (!hasSearch || test.employees[i][searchField] == search) &&
            (!hasSearch_class || test.employees[i][searchField2] == search_class) &&
            (!hasSearch_subject || test.employees[i][searchField3] == search_subject)
        ) {
            $scope.results.push(test.employees[i]);
        } 
    }
};

正如你所看到的,我没有得到我想要的输出。它应该只列出第三行,名称为“John”klasse“12”和fach“D”

我如何解决这个问题

这是我目前的职能:

 $scope.submit = function () {
    $scope.results = [];

    var searchField = "name",
        searchField2 = "klasse",
        searchField3 = "fach";

    var search          = $scope.suchbegriff,
        search_class    = $scope.klasse,
        search_subject  = $scope.fach;

    if(
        search_subject == null || search_subject == ''
        && search == null || search == ''
        && search_class == null || search_class == ''
    ) {
        $scope.filter = false;
    }

    for (var i=0 ; i < test.employees.length ; i++) {
        if (
            test.employees[i][searchField] == search ||
            test.employees[i][searchField2] == search_class ||
            test.employees[i][searchField3] == search_subject
        ) {
            $scope.filter = true;
            $scope.results.push(test.employees[i]);
        } 
    }
};
$scope.submit=函数(){
$scope.results=[];
var searchField=“name”,
searchField2=“klasse”,
searchField3=“fach”;
var search=$scope.suchbegriff,
search_class=$scope.klasse,
搜索主题=$scope.fach;
如果(
搜索主题==null | |搜索主题==''
&&搜索==null | |搜索==''
&&搜索_类==null ||搜索_类==''
) {
$scope.filter=false;
}
对于(var i=0;i

谢谢你的帮助

问题在于,在
for…
循环中,您推送的是符合任一搜索条件的员工,而不是符合提供的所有搜索条件的员工。请尝试以下操作:

 $scope.submit = function () {
    $scope.results = [];

    var searchField = "name",
        searchField2 = "klasse",
        searchField3 = "fach";

    var search          = $scope.suchbegriff,
        search_class    = $scope.klasse,
        search_subject  = $scope.fach;

    var hasSearch          = !(search == null || search == ''),
        hasSearch_class    = !(search_class == null || search_class == ''),
        hasSearch_subject  = !(search_subject == null || search_subject == '');

    $scope.filter = hasSearch || hasSearch_class || search_subject;

    for (var i=0 ; i < test.employees.length ; i++) {
        if (
            (!hasSearch || test.employees[i][searchField] == search) &&
            (!hasSearch_class || test.employees[i][searchField2] == search_class) &&
            (!hasSearch_subject || test.employees[i][searchField3] == search_subject)
        ) {
            $scope.results.push(test.employees[i]);
        } 
    }
};
$scope.submit=函数(){
$scope.results=[];
var searchField=“name”,
searchField2=“klasse”,
searchField3=“fach”;
var search=$scope.suchbegriff,
search_class=$scope.klasse,
搜索主题=$scope.fach;
var hasSearch=!(搜索==null | |搜索==''),
hasearch_class=!(search_class==null | | search_class==“”),
hasearch_subject=!(search_subject==null | | search_subject==”);
$scope.filter=hasearch | | hasearch |类| |搜索|主题;
对于(var i=0;i
看看我创建的这支钢笔。

} })

这类事情如果留待过滤器处理就容易多了。您使用了三个参数,所以,我认为angular的默认过滤器没有任何用处。你可以简单地做你自己的。看到笔中的过滤器了吗


希望有帮助。

啊,我明白了,这是解决我问题的一个很好的办法。我以前从来没有听说过角度过滤器,所以我用自己的方式尝试了一下。谢谢你的好解决方案!这对我帮助很大!