JavaScript 列表中两个数字之间的函数?

JavaScript function between two numbers in a list?

我想创建一个函数来从以下列表中检索结果

var Fedsy = [
            {min : 0, max : 2300 , must:0, percent:0 , excess:0}, 
            {min : 2300, max : 11525 , must:0, percent:10 , excess:2300},
            {min : 11525, max : 39750 , must:922.50, percent:15 , excess:11525},
            {min : 39750, max : 93050 , must:5156.25, percent:25 , excess:39750},
            {min : 93050, max : 191600 , must:18481.25, percent:28 , excess:93050},
            {min : 191600, max : 413800 , must:46075.25, percent:33 , excess:191600},
            {min : 413800, max : 415500 , must:119401.25, percent:35 , excess:413800},
            {min : 415500, max : 1000000000 , must:119996.25, percent:39.6 , excess:415500}
            ];

如果 "inputNum" 介于 "min" 和 "max"

之间,我想从上面的列表中拉出该行
var result= function(inputNum){
///..???
}

例如:如果 "inputNum"= 40000 函数应该 return

{min : 39750, max : 93050 , must:5156.25, percent:25 , excess:39750}

由于您标记了 underscore.js,我了解到您想使用该库解决问题。

因此,您可以使用函数 _.find 来查找与条件匹配的第一个值。把它想象成一个过滤器,但只看第一个:

function findRange(inputNum) {
    return _.find(Fedsy, function(f) {
      return f.min <= inputNum && f.max >= inputNum;
    });
}

迭代器函数中从 Fedsy (f) 到 return true 的第一项将是下划线 returns 的值。

您可能会在 underscore.js 网站上看到更详细和更多参考功能:http://underscorejs.org/

我做了什么:

我创建了您提到的函数,它使用纯 javascript,没有任何库。它遍历 Fedsy 数组中的每一项,并查看该值是否在范围内。如果是这样,它 returns 有问题的行。

它也会returns一找到结果就不再继续搜索对象。

数据

var Fedsy = [
            {min : 0, max : 2300 , must:0, percent:0 , excess:0}, 
            {min : 2300, max : 11525 , must:0, percent:10 , excess:2300},
            {min : 11525, max : 39750 , must:922.50, percent:15 , excess:11525},
            {min : 39750, max : 93050 , must:5156.25, percent:25 , excess:39750},
            {min : 93050, max : 191600 , must:18481.25, percent:28 , excess:93050},
            {min : 191600, max : 413800 , must:46075.25, percent:33 , excess:191600},
            {min : 413800, max : 415500 , must:119401.25, percent:35 , excess:413800},
            {min : 415500, max : 1000000000 , must:119996.25, percent:39.6 , excess:415500}
            ];

函数

function filterArray(inputNum){
    var row;

    // Foreach item in the array
    for(rownum in Fedsy){ 
        var row = Fedsy[rownum];

        // If "inputNum" is greater than or equal to "row.min" & less than "row.max"
        if(inputNum >= row.min && inputNum < row.max){
            return row;
        }
    }
}

用法

var result = filterArray(3);  // returns first row
console.log(result.must); //0

如果您只想要第一个匹配行,那么 underscore/lodash 的 _.find https://lodash.com/docs#find 的应用可能就是您想要的:

var result = (function(inputNum){
    return _.find(Fedsy, function(item){
        return inputNum>item.min && inputNum<item.max;
    });
})();

这将立即 运行 一个接受 inputNum 的匿名函数,并在另一个匿名函数中使用它 _.find 用来检查每个项目。 _.find的好处是一碰到结果就停止查找。

理想情况下,您应该以更通用的方式编写内容,这样您就可以分别指定您的过滤器和要过滤的内容,因此也许可以这样做:

var minmaxFilterFunc = function(inputNum){
    return function(item){
        return inputNum>item.min && inputNum<item.max;
    };
};

现在,您可以使用 minmaxFilterFunc 创建一个函数,该函数对于特定的 inputNum return 为真。现在您可以直接使用 find,在一行中创建适当的过滤器函数。更易于阅读,也更易于重用,以便以后过滤不同数字的其他集合。

var result = _.find(Fedsy, minMaxFilterFunc(inputNum));