Javascript AngularJs通过另一个数组过滤一个数组
我在一个控制器中有三个阵列:Javascript AngularJs通过另一个数组过滤一个数组,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我在一个控制器中有三个阵列: $scope.alluser包含所有用户,按:id和:name列出。例如,smth喜欢 $scope.job.delegate_to包含与作业委派相关的信息。看起来像这样 $scope.freeUsers必须包含所有用户,而不是委派给作业的用户 我加了一块手表 $scope.$watch('job.delegated_to.length', function(){ $scope.freeUsers = filterUsers( $scope.allUsers,
$scope.alluser
包含所有用户,按:id
和:name
列出。例如,smth喜欢$scope.job.delegate_to
包含与作业委派相关的信息。看起来像这样$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;
}
签出小提琴您的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;
}
签出小提琴我建议使用类似的库,它有许多有用的实用功能。然后,您可以将筛选函数编写为:
function filterUsers(allUsers, delegatedTo) {
var delegatedIndex = _.indexBy(delegatedTo, 'user_id');
return _.reject(allUsers, function(user) {return user.id in delegatedIndex});
}
我建议使用像这样的库,它有许多有用的实用功能。然后,您可以将筛选函数编写为:
function filterUsers(allUsers, delegatedTo) {
var delegatedIndex = _.indexBy(delegatedTo, 'user_id');
return _.reject(allUsers, function(user) {return user.id in delegatedIndex});
}
虽然@dubadub正确地回答了OP问题,但我认为OP可能意味着其他东西:使用可用于
ng repeat
指令的角度$Filter
@阿尔马隆,你能澄清一下吗?@alonisser,两种方式都可以。请注意,这种过滤器只能在控制器中使用。如果您想在模板中与“ng repeat freeUsers | nonAssignedUsers”一起使用它,您必须将其中一个建议的过滤器封装在一个角度@alonisser注释中,谢谢。虽然@dubadub正确回答了OP问题,我认为OP可能意味着其他东西:使用一个角度$Filter
,可以在ng repeat
指令上使用@阿尔马隆,你能澄清一下吗?@alonisser,两种方式都可以。请注意,这种过滤器只能在控制器中使用。如果你想在“ng repeat freeUsers | nonAssignedUsers”的模板中使用它,你必须将其中一个建议的过滤器封装在angular@alonisser中,谢谢。