Javascript 如何包含一个";字符串包括;角滤波器内部的函数
我正在使用复选框进行过滤,我的geojson具有status属性。状态值如下所示: 地位 : “第3Q99号法案” 或 地位 : “未来3季度99” 我需要通过“Act”或“Fut”进行过滤。这是我的过滤器: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
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编码,但还没有进入过滤器。谢谢。正如我所说,我刚刚更改了必要的内容,并将重构留给了作者:)