Javascript 过滤JSON中的某些值
我有一个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"
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的默认过滤器没有任何用处。你可以简单地做你自己的。看到笔中的过滤器了吗
希望有帮助。啊,我明白了,这是解决我问题的一个很好的办法。我以前从来没有听说过角度过滤器,所以我用自己的方式尝试了一下。谢谢你的好解决方案!这对我帮助很大!