Javascript 阵列的角滤波器阵列
在过去的几天里,我很难过滤带有角度的数组并显示它。我曾尝试寻找类似的帖子,但我找不到解决我的问题的方法 我的数据的外观示例:Javascript 阵列的角滤波器阵列,javascript,arrays,angularjs,filter,Javascript,Arrays,Angularjs,Filter,在过去的几天里,我很难过滤带有角度的数组并显示它。我曾尝试寻找类似的帖子,但我找不到解决我的问题的方法 我的数据的外观示例: $scope.answers = [ {title: "Qestion1", keywords: ["dino", "dog", "cat"]}, {title: "Quessstion2", keywords: ["cat", "dog"]} ]; 目前我正在显示一个列表: <div class="solution-box" ng-repeat=
$scope.answers = [
{title: "Qestion1", keywords: ["dino", "dog", "cat"]},
{title: "Quessstion2", keywords: ["cat", "dog"]}
];
目前我正在显示一个列表:
<div class="solution-box" ng-repeat="answer in pagedItems[currentPage]">
Search2()函数,该函数不更改filteredItems
$scope.search2 = function () {
$scope.filteredItems = $filter('filter')($scope.answers, function (answer) {
return $filter('filter')(answer.keywords, function (keyword) {
if (searchMatch(keyword, $scope.keys)) {
console.log($scope.filteredItems + '/' + keyword + '|' + $scope.keys);
return true;
}
return false;
});
});
$scope.currentPage = 0;
// now group by pages
$scope.groupToPages();
};
有人能告诉我Search2()函数有什么问题吗?
当我记录filteredItems时,它会记录正确数量的答案,但列表仍然保持原来的大小。
我这里缺少的自定义过滤器的主要逻辑是什么
谢谢,正如@mgilson所指出的,您需要从过滤器回调函数返回一个布尔值,但您返回的数组将始终是真实的。这里也不需要使用
$filter('filter')
。你可以这样做:
$scope.filteredItems = $scope.answers.filter(function(answer) {
var matches = answer.keywords.filter(function() {
return searchMatch(keyword, $scope.keys);
});
return matches.length > 0;
});
我建议制作一个jsfiddle/plunker。
$filter('filter')
将返回您传递给它的函数返回真实值的项目。使用search2
,您将返回另一个$filter('filter')
的结果,该结果可能是一个数组,因此总是真实的,因此不会进行任何过滤。你期望内部过滤器在那里做什么?我以为$filter('filter')在数组的一个级别上工作,所以我想用内部过滤器过滤关键字,然后用过滤过的关键字过滤答案。其思想是通过过滤标题和关键字来显示列表。
$scope.search2 = function () {
$scope.filteredItems = $filter('filter')($scope.answers, function (answer) {
return $filter('filter')(answer.keywords, function (keyword) {
if (searchMatch(keyword, $scope.keys)) {
console.log($scope.filteredItems + '/' + keyword + '|' + $scope.keys);
return true;
}
return false;
});
});
$scope.currentPage = 0;
// now group by pages
$scope.groupToPages();
};
$scope.filteredItems = $scope.answers.filter(function(answer) {
var matches = answer.keywords.filter(function() {
return searchMatch(keyword, $scope.keys);
});
return matches.length > 0;
});