我有一个用这个函数过滤的数组:
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>
但该过滤器是基于精确的标准。我想过滤浮点数arr
介于 1 和 3 或 6 和 10 之间。我还希望能够运行您在上面看到的其他过滤器,包括 dep、arr、car、epi、dur。我有什么办法可以做到这一点吗?
Use 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 ]
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)