簡體   English   中英

AngularJs 按另一個數組過濾一個數組

[英]AngularJs Filter an array by another array

我在控制器中有三個數組:

  1. $scope.allUsers包含所有用戶的:id:name 例如像這樣
  2. $scope.job.delegated_to包含與工作委托相關的信息。 看起來像這樣。
    $scope.job.delegated_to = [
      {id: 5, user_id:33, user_name:"Warren", hour_count:4},
      {id: 5, user_id:18, user_name:"Kelley", hour_count:2},
      {id: 5, user_id:10, user_name:"Olson", hour_count:40},
      {id: 5, user_id:42, user_name:"Elma", hour_count:2},
      {id: 5, user_id:45, user_name:"Haley", hour_count:4},
      {id: 5, user_id:11, user_name:"Kathie", hour_count:3}
     ]
  1. $scope.freeUsers必須包含所有用戶,而不是委派給工作。

我加了一塊手表

$scope.$watch('job.delegated_to.length', function(){
  $scope.freeUsers = filterUsers( $scope.allUsers, $scope.job.delegated_to );
});

但一直無法構建一個工作過濾器。

您的 filterUsers 函數類似於:

var filterUsers = function(allUsers, jobs) {
    var freeUsers = allUsers.slice(0); //clone allUsers
    var jobUserIds = [];
    for(var ind in jobs) jobUserIds.push(jobs[ind].user_id);
    var len = freeUsers.length;
    while(len--){
      if(jobUserIds.indexOf(allUsers[len].id) != -1)  freeUsers.splice(len, 1);
    }    
    return freeUsers;
}

結帳小提琴http://jsfiddle.net/cQXBv/

我建議使用像Lo-Dash這樣的庫,它有許多有用的實用功能。 然后,您可以將過濾器函數編寫為:

function filterUsers(allUsers, delegatedTo) {
    var delegatedIndex = _.indexBy(delegatedTo, 'user_id');
    return _.reject(allUsers, function(user) {return user.id in delegatedIndex});
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM