AngularJS: Custom filter

Return difference between two array's & call this filter from both controller and view template

by masudcsesust04

HTML

<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<div ng-app="myApp" ng-controller="AppCtrl">
    <pre>Controller = {{groups1 | json}}</pre>    
    
    <pre>View = {{groups | differenceOfArray:assigned_groups | json}}</pre>
</div>

JavaScript

'use strict';


var app = angular.module('myApp', ['app.filters']);

app.controller('AppCtrl', function($scope, $filter) {
    //$scope.hello = 'Hello';            
    $scope.groups = [
      {"id": 9,"name": "PG","status": 1},
      {"id": 4,"name": "pof","status": 1},
      {"id": 8,"name": "TG","status": 1}
    ];    
    
    $scope.assigned_groups = [
        {"id": 9,"name": "PG","status": 1},
        {"id": 4,"name": "pof","status": 1}
      ];           
        
    $scope.groups1 = $filter('differenceOfArray')($scope.groups, $scope.assigned_groups);    
});


var app_filters = angular.module('app.filters', []);

app_filters.filter('differenceOfArray',[function() {  
    return function(array1, array2) {        
        if(angular.isDefined(array1) && angular.isDefined(array2)){                      
            for (var i=0; i<array2.length; i++) {
                for (var j=0; j<array1.length; j++) { 
                    if(angular.equals(array2[i], array1[j])) { 
                    array1 = array1.slice(j+1);
                    break;
                    } 
                }
            }            
            return array1;
        }
    }
}]);