javascript - 如何根据数字范围过滤数组?

标签 javascript html arrays

我有一个用这个函数过滤的数组:

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 中选择。对于持续时间,这是我所拥有的:

<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 之间的 float 。我还希望能够运行我在上面看到的其他过滤器,包括 dep、arr、car、epi , 持续时间我有什么办法可以做到这一点吗?

最佳答案

使用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 ]
);

关于javascript - 如何根据数字范围过滤数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23945913/

相关文章:

javascript - 在对象中按名称查找嵌套属性的最佳方法

javascript - 在堆叠条形图上使用 javascript 过滤器 (data.filter) 时,d3 NaN

html - 照片浏览器中的framework7 rtl上一个/下一个按钮

javascript - 将整数数组排序为奇数,然后是偶数

c# - Javascript 警报写入呈现的 HTML 顶部

javascript - 关于 jQuery 脚本的简单问题

html - 在奇怪的布局中对齐 div

javascript - 无法让简单的 focus() 函数工作

javascript - 我想从数组中获取最后 6 个对象

java - 在 Java 中处理 String 数组元素