Javascript 如何包含一个";字符串包括;角滤波器内部的函数

Javascript 如何包含一个";字符串包括;角滤波器内部的函数,javascript,angularjs,angularjs-ng-repeat,angularjs-filter,Javascript,Angularjs,Angularjs Ng Repeat,Angularjs Filter,我正在使用复选框进行过滤,我的geojson具有status属性。状态值如下所示: 地位 : “第3Q99号法案” 或 地位 : “未来3季度99” 我需要通过“Act”或“Fut”进行过滤。这是我的过滤器: function StatusFilter() { return function (territorySubdivisions, typeFilter) { var filtered = []; angular.forEach(territ

我正在使用复选框进行过滤,我的geojson具有status属性。状态值如下所示:

地位 : “第3Q99号法案”

地位 : “未来3季度99”

我需要通过“Act”或“Fut”进行过滤。这是我的过滤器:

   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;
    };
};
这是我试过的

细分.properties.status.indexOf('Act')!=-一,

它当然不起作用。我创造了一个工作的劫掠者。我包括了其他orderBy和过滤代码,以确保没有冲突


活跃的
未来

您的代码看起来很奇怪。难道你不需要这个吗:

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);
}

您的代码看起来很奇怪。难道你不需要这个吗:

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);
}

这里对@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);
}
请注意,一旦您得到布尔值
匹配
答案,您可以使用
数组。过滤
生成结果,而不是使用
累积结果。推送
-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);          
        });
    } 
}

下面是@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);
}
请注意,一旦您得到布尔值
匹配
答案,您可以使用
数组。过滤
生成结果,而不是使用
累积结果。推送
-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);          
        });
    } 
}

看起来是这样,itI也会将那些与布尔值的比较更改为
booleanVariable
!booleanVariable
。请您调整一下活塞。感谢您的帮助看起来这是itI还将更改那些与布尔值的比较为
booleanVariable
!booleanVariable
。请您调整一下活塞。感谢您的帮助一旦您有了一个生成布尔值的表达式,就不再需要使用从过滤器返回数组的语法。布尔返回更清晰——更类似于Array.filter()的功能。@AmyBlankenship我自己刚刚准备添加一个注释,检查了
Array.filter
是否与AngularJS本身具有相同的浏览器支持(尽管没有使用Angular自己的过滤功能)使用AngularJS过滤器的优点是,您可以在视图端使用它。您也可以在代码端使用它,但要弄清楚如何使用它以及使用什么语法可能会很痛苦。@AmyBlankenship true-我最近一直在做一些AngularJS编码,但还没有进入过滤器。谢谢。正如我所说,我刚刚更改了必要的内容,并将重构留给了作者:)一旦有了一个生成布尔值的表达式,就不再需要使用从过滤器返回数组的语法。布尔返回更清晰——更类似于Array.filter()的功能。@AmyBlankenship我自己刚刚准备添加一个注释,检查了
Array.filter
是否与AngularJS本身具有相同的浏览器支持(尽管没有使用Angular自己的过滤功能)使用AngularJS过滤器的优点是,您可以在视图端使用它。您也可以在代码端使用它,但要弄清楚如何使用它以及使用什么语法可能会很痛苦。@AmyBlankenship true-我最近一直在做一些AngularJS编码,但还没有进入过滤器。谢谢。正如我所说,我刚刚更改了必要的内容,并将重构留给了作者:)