我想创建一个函数,它将从以下列表中检索结果
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”和&之间,我想从上面的列中提取行。 “最大值”
var result= function(inputNum){
///..???
}
例如:如果“inputNum”= 40000,则该函数应返回
{min : 39750, max : 93050 , must:5156.25, percent:25 , excess:39750}
答案 0 :(得分:1)
由于您标记了underscore.js
,我了解您希望使用该库解决问题。
因此,您可以使用函数_.find
来查找与条件匹配的第一个值。把它想象成一个过滤器,但只是看看第一个:
function findRange(inputNum) {
return _.find(Fedsy, function(f) {
return f.min <= inputNum && f.max >= inputNum;
});
}
Fedsy(f
)中第一个在迭代器函数中返回true
的项将是下划线返回的值。
您可以在underscore.js网站上更详细地了解更多参考函数:http://underscorejs.org/
答案 1 :(得分:0)
我创建了你提到的函数,它使用纯javascript而没有任何库。它遍历Fedsy数组中的每个项目,并查看该值是否在该范围内。如果是这样,它将返回有问题的行。
一旦发现结果没有继续搜索对象,它也会返回。
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
答案 2 :(得分:0)
如果您只想要第一个匹配的行,那么下划线/ 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返回true的函数。现在您可以直接使用find,在一行中创建适当的过滤功能。更容易阅读,也更容易重复使用,以便以后过滤不同数字的其他集合。
var result = _.find(Fedsy, minMaxFilterFunc(inputNum));