【发布时间】:2015-01-20 22:28:20
【问题描述】:
我在一个对象中存储了一堆过滤条件。条件不时变化,所以我不能有静态过滤器(即:price > 5 && price < 19 && ...)。
var criteria = {
price: {
min: 5,
max: 19
},
age: {
max: 35
}
};
然后我有一个循环设置来根据条件过滤数组并返回过滤后的数组:
var filtered = [];
var add = true;
for (var i=0; i < data.length; i++ ){
add = true;
var item = data[i];
for (var main in criteria){
for (var type in criteria[main] ){
if ( type === 'min') {
if ( !(item[main] > criteria[main][type]) ) {
add = false;
break;
}
} else if ( type === 'max') {
if ( !(item[main] < criteria[main][type]) ) {
add = false;
break;
}
}
}
}
if (add) {
filtered.push(item);
}
}
有没有更有效的方法来提前设置过滤条件(即:item.price > 5 && item.price < 19 && item.age < 35)然后过滤数组?与我目前正在做的事情和在每个数组循环期间引用对象相反 - 这对于所有条件和子循环来说都是低效的。
查看我的 jsbin - http://jsbin.com/celin/2/edit 。
【问题讨论】:
-
你考虑过下划线的过滤器和链接吗?
标签: javascript arrays loops filter