如何从一个列表中删除重复的元素,并在angularjs中删除另一个列表

时间:2015-02-17 18:33:32

标签: angularjs

我有一个场景,我有三个列表

1) $scope.edit.user

用户列表中的每个值都包含对象形式的“id”,“name”,“number”  。第二个清单是

2) $scope.edit.duplicateUser

此列表仅包含数组

形式的ids ex:[12,13,14]

如果duplicateUser列表包含用户列表中存在的某些用户,那么我想从以下位置拼接该用户对象:

$scope.edit.user

并添加到第三个列表中:

$scope.edit.intersectedUsers = []

3 个答案:

答案 0 :(得分:0)

我建议使用lodash进行列表/数组/集合操作:

https://lodash.com/docs

答案 1 :(得分:0)

使用Lodash

$scope.edit.intersectedUsers = _.remove($scope.edit.user, 
    function(u) { return _.indexOf($scope.edit.duplicateUser, u.Id) > -1; });

如果对$ scope.edit.duplicateUser进行了排序,则可以通过将true添加到_.indexOf()来进行二进制搜索来提升性能。

$scope.edit.intersectedUsers = _.remove($scope.edit.user, 
    function(u) { return _.indexOf($scope.edit.duplicateUser, u.Id, true) > -1; });

答案 2 :(得分:0)

你在谈论客户端的集合操作,你应该使用下划线\ lodash。

    $scope.edit.intersectedUsers = _.find($scope.edit.user, function(user){
        if (_.contains($scope.edit.duplicateUser, user.id){
            return user;
        }
    }); //intersectedUsers will contain only the users with id from duplicateUser

    $scope.edit.user = _.difference([$scope.edit.user, $scope.edit.intersectedUsers); 
//User list will be modified to itself without the duplicated users

安装说明以及有关underscore here

的更多信息

安装说明以及有关lodash here

的更多信息