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));
我想创建一个函数来从以下列表中检索结果
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));