How to enable the function "line includes" inside the angular filter

I am working on filtering using checkboxes, my geojson has a status property. status matters, it looks like this:

Status: "Action 3Q99"

or

Status: "Fut 3Q99"

I need to filter "Act" or "Fut". here is my filter:

   function StatusFilter() {

    return function (territorySubdivisions, typeFilter) {
        var filtered = [];
        angular.forEach(territorySubdivisions, function (subdivision) {
            if (typeFilter.active == true && typeFilter.future == true) {
                filtered.push(subdivision);
            }
            else if (typeFilter.active == true && typeFilter.future == false && subdivision.properties.status == subdivision.properties.status.indexOf('Act') != -1) {
                filtered.push(subdivision);
            }
            else if (typeFilter.future == true && typeFilter.active == false && subdivision.properties.status == subdivision.properties.status.indexOf('Fut') != -1) {
                filtered.push(subdivision);
            }
        });
        return filtered;
    };
};

this is what i tried.

subdivision.properties.status.indexOf ('Act')! = -1

This, of course, does not work. I created a working plunker. I included another orderBy and filtering code to make sure there were no conflicts.

working plunker

   <div class="col-xs-3">
            <div class="checkbox checkbox-success checkbox-inline">
                <input type="checkbox" id="active-checkbox-filter" ng-model="vm.typeFilter.active" ng-change="vm.statusActive('active')">
                <label for="active-checkbox-filter"> Active </label>
            </div>
        </div>
        <div class="col-xs-3">
            <div class="checkbox checkbox-success checkbox-inline">
                <input type="checkbox" id="future-checkbox-filter" ng-model="vm.typeFilter.future" ng-change="vm.statusFuture('future')">
                <label for="future-checkbox-filter"> Future </label>
            </div>
        </div>
0
source share
2 answers

Your code looks weird. You do not need this:

if (typeFilter.active === true && typeFilter.future === true) {
    filtered.push(subdivision);
} else if (typeFilter.active === true && typeFilter.future === false && subdivision.properties.status.indexOf('Act') >= 0) {
    filtered.push(subdivision);
} else if (typeFilter.future === true && typeFilter.active === false && subdivision.properties.status.indexOf('Fut') >= 0) {
    filtered.push(subdivision);
}

?

+1

@Mate , , " ":

var active = typeFilter.active;
var future = typeFilter.future;
var status = subdivision.properties.status;

var match = (active && future) ||
            (active && !future && status.indexOf('Act') >= 0) ||
            (future && !active && status.indexOf('Fut') >= 0);

if (match) {
    filter.push(subdivision);
}

, boolean match, Array.filter , .push - MSIE 9+, , AngularJS, :

function StatusFilter() {
    return function (territorySubdivisions, typeFilter) {
        return territorySubdivisions.filter(function(subdivision) {
            var active = typeFilter.active;
            var future = typeFilter.future;
            var status = subdivision.properties.status;

           return (active && future) ||
                  (active && !future && status.indexOf('Act') >= 0) ||
                  (future && !active && status.indexOf('Fut') >= 0);          
        });
    } 
}
+3

Source: https://habr.com/ru/post/1620895/


All Articles