Better Search using angular filter

1. Spaces ( ) removed 2. Commas (,) removed 3. Token / Word based search - Mayank Dixit

by Mayank Dixit

HTML

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.8/angular.min.js"></script>
<div ng-app="app">
 <div ng-controller="ParentCtrl">
     Search: <input ng-model="searchText" id='gresult'/><br/>
     <ul><li ng-repeat="list in glist | searchAllClouds: modifySearchText() track by $index">{{list.keyword}}</li></ul>
 </div>
</div>

JavaScript

angular.module('myApp', [])
.controller('ParentCtrl', function($scope) {
    
    function removeSpaces(x){
        var y='';
        if (x) y = x.replace(/  /g,' ').replace(/,/g, '');
        if(y == x) return y.trim();
        else return removeSpaces(y)
    }
    
    $scope.glist=[{keyword:'mayank, simple', id:1},{keyword:'tripple', id:2},{keyword:'factor', id:3},{keyword:'jeevan', id:4},{keyword:'whaever', id:5},{keyword:'simple', id:6},{keyword:'mrityu', id:7}];
    
    $scope.modifySearchText = function(){
        console.log($scope.searchText, "this is searchText")
        if($scope.searchText){
            return removeSpaces($scope.searchText).split(' ')
        }
        return ""
    }
}).
filter('searchAllClouds', function(){
    return function(searchIn, input){
        var res=[];
        if(input == undefined) input=[];
        console.log('search in:', searchIn, '\nsearchfor: ', input)
        for(var i=0; i<searchIn.length; i++){
            for(var j=0; j<input.length ; j++){
                if(searchIn[i].keyword.indexOf(input[j].trim()) >= 0)
                    res.push(searchIn[i])
            }
        }
        res = res.filter(function(el,i,a) {return (i==a.indexOf(el));})
        console.log('filtered: ', res);
        return res
    }    
});