筛选数组优先级为name属性 - angularjs

时间:2016-03-09 07:18:06

标签: angularjs underscore.js angularjs-filter

我希望过滤掉搜索结果,同时在管理员之前保留名称。

我无法使用bcoz的音轨我没有使用实际的重复,而是指令, 这是一个代表我问题的快速fiddle

假设我搜索Fahad名称中Fahad的记录应该先出现

使用下划线/ loadash的解决方案也很受欢迎。

由于

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你只需要用户名为""匹配searchQuery以支持匹配用户列表。您并不是真的要求对匹配的用户进行排序。

此处jsfiddle更新了这样做。您会注意到我使用angular.copy制作了用户数组的副本,并在匹配发生时更新它。

function TodoCtrl($scope) {
  // Code goes here

  $scope._users = [
    {name:'Zafar', manager:'Owais',visible:true},
    {name:'Owais', manager:'Fahad',visible:true},
    {name:'Fahad', manager:'Raheel',visible:true}
  ];

  $scope.users = angular.copy($scope._users);

  $scope.update = function() {
    $scope.users = angular.copy($scope._users);
    $scope.users.forEach(function (user,i) {
      var match = false;
      ['name','manager'].forEach(function (field) {
        console.log(user);
        if ($scope.users[i][field].toLowerCase().match($scope.searchQuery)) {
          match = true;
          if (field === 'name') {
            $scope.users.splice(i,1);
            $scope.users.unshift(user);
          }
        }
      });

      if (!match) {
        $scope.users[i].visible = false;
      }
      else {
        $scope.users[i].visible = true;
      }
    });
  }
}