我在控制器中有三个数组:
$scope.allUsers
包含:id
和:name
之后的所有用户。例如。像this一样。 $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}
]
$scope.freeUsers
必须包含所有用户,而不是委托给该职位。
我添加了一块手表
$scope.$watch('job.delegated_to.length', function(){
$scope.freeUsers = filterUsers( $scope.allUsers, $scope.job.delegated_to );
});
但无法构建工作过滤器。
答案 0 :(得分:3)
您的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;
}
答案 1 :(得分:2)
我建议使用像Lo-Dash这样的库,它有许多有用的实用功能。然后,您可以将过滤函数编写为:
function filterUsers(allUsers, delegatedTo) {
var delegatedIndex = _.indexBy(delegatedTo, 'user_id');
return _.reject(allUsers, function(user) {return user.id in delegatedIndex});
}