我有一个数组,我使用这个功能进行过滤:
function filter(arr,criteria) { return arr.filter(function(obj) { return Object.keys(criteria).every(function(c) { return !(criteria[c]) || obj[c] == criteria[c]; }); }); } var arr = filter(arr,{ dep: dv,arr: av,car: cv,epi: acv,dur: dv });
而且我有一些选项,用户可以在选择中选择.对于持续时间,这里是我有的:
<select name="duration" id="duration"> <option selected disabled hidden value="">-</option> <option value="l1">Less than 1 hour</option> <option value="1to3">1 to 3 hours</option> <option value="3to6">3 to 6 hours</option> <option value="6to10">6 to 10 hours</option> <option value="m10">More than 10 hours</option> </select>
但是该过滤器是基于准确的标准.我想过滤1到3或6到10之间的arr中的浮点数.我也想要运行我的其他过滤器,你看到那里的dep,arr,car,epi,dur.有什么办法可以做到吗?
解决方法
使用
array.filter
与回调.下面的代码使用与选项值对应的条目的字典.
var myArray = [1,2,3,3.1,Math.PI,4,4.3,6.1]; //sample array //Dictionary from option values to functions (JS objects work like hashtables) var options = { "l1": function(a){return a.duration<1;},"1to3": function(a){return a.duration>=1 && a.duration<3;},"3to6": function(a){return a.duration>=3 && a.duration<=6;},... //When you need to filter the array,do it like so: var myNewArray = myArray.filter( options[ document.getElementById('duration').selectedOptions[0].value ] );