Javascript (angularJS) : filter by multiple field

标签 javascript angularjs filter

例如我有这样的列表(我将其与 ng-repeat 一起使用):

var myList = [
  {id: 1, name: 'Peter Ollison', type: 'Driver', status: 'Working'},
  {id: 2, name: 'Maya Nameson', type: 'Manager', status: 'Not'},
  {id: 3, name: 'Iki Jonny', type: 'Driver', status: 'Paused'},
  {id: 4, name: 'Nikolay Ivanov', type: 'Manager', status: 'Working'},
  {id: 5, name: 'Nikolay Ivanov', type: 'Sales manager', status: 'Not'},
  {id: 6, name: 'Scotty Deperson', type: 'Boss', status: 'Working'},
]

我有过滤器阵列:

nameFilter: ['Peter Ollison', 'Nikolay Ivanov']
typeFilter: ['Manager', 'Driver']
statusFilter: ['Working']

过滤器功能如何组合所有这些过滤器?并仅从列表中返回等于过滤器数组的这些项目?但!!!我可以拥有:

filter only by name, or only by type, or 2 fields, or all of them

如何过滤我的列表?

例如,如果我一次过滤 3 个过滤器数组,我应该得到结果:

[{id: 1, name: 'Peter Ollison', type: 'Driver', status: 'Working'},
{id: 4, name: 'Nikolay Ivanov', type: 'Manager', status: 'Working'}]

现在我只能通过 Controller 中的一个值进行过滤,而且我被多个字段过滤器困住了((

最佳答案

$scope.showIssueItem = function (item) {
  var resultAssigneeCount = 0,
      resultTypeCount = 0,
      resultStatusCount = 0;

  if ($scope.nameFilterArr.length > 0) {
    angular.forEach($scope.nameFilterArr, function(value) {
      if (item.name === value) {
        resultAssigneeCount++;
      }
    });
  }else{
       resultAssigneeCount = 1;
  }

  if ($scope.typeFilterArr.length > 0) {
    angular.forEach($scope.typeFilterArr, function(value) {
      if (item.type === value) {
        resultTypeCount++;
      }
    });
  }else{
       resultTypeCount = 1;
  }

  if ($scope.statusFilterArr.length > 0) {
    angular.forEach($scope.statusFilterArr, function(value) {
      if (item.status === value) {
        resultStatusCount++;
      }
    });
  }else{
       resultStatusCount = 1;
  }

  return resultAssigneeCount>0 && resultTypeCount>0 && resultStatusCount>0;
};

关于Javascript (angularJS) : filter by multiple field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39514207/

相关文章:

javascript - CORS:凭据模式为 'include'

javascript - 基于动态 ID 列表的 Angular 过滤器

java - Servlet 安全过滤器

javascript - 加载并附加外部 html 文件

angularjs - 在 ng Select 中设置默认值

angularjs - 我如何通过 Angular js中的键获取 map 中的值

python - 设计过滤函数的谓词

javascript - 从表中查询值

javascript - 如何在数组 javascript 中使用 split() 和 setTimeout()

javascript - 将 JS 逗号分隔的 var 声明拆分为多个 var 声明的脚本