如何创建一个确定2个数字之间值的函数
How to create a function that determines value between 2 numbers
我有这个数字范围:
0 -------> 25 -------> 80 ------> 150
small medium large
我想接收一个0到150之间的数字,并显示它是小、中还是大。30和45是中等的,因为它们在25和80之间,而5是小的,因为它低于25。
我想创建一个函数来匹配这个对象:
var sizeMap = { small : 25, medium : 80, large : 150 }
(假设0是最低的数字)。
该功能应该看起来像:
function returnSize(number) {
for (item in sizeMap)
???????
return size
}
如何编写此函数,以便它可以灵活地添加新类别(例如:"特大号":250)。我应该将对象表示为数组吗?
要有确定性的输出,我更喜欢按有问题的类别排序的数组:
var categories = [
{label: 'small', upTo: 25},
{label: 'medium', upTo: 80},
{label: 'large', upTo: 150} ];
(您甚至可以从原始sizeMap
创建此阵列)
然后你可以做:
function getSizeCategory(number, categories) {
for (var i = 0; i < categories.length; ++i) {
if (number < categories[i].upTo) {
return categories[i].label;
}
}
throw new Error("not in range!");
}
function returnSize(number, sizeMap) {
for (var key in sizeMap) {
if (number < sizeMap[key]) return key;
}
return key;
}
只返回满足"小于"条件的最大值:
function returnSize (number) {
var item;
for (item in sizeMap) {
if (number < sizeMap[item]) {
return item;
}
}
return item; // this will return largest size if it gets this far
}
您应该使用一个选项数组。由DESC.订购
如果你需要遵守一个上限,你可以用你的第一个数字(最大的)来测试你的数字。
当你的数字低于或等于一个类别的上限时,你就知道他属于哪个类别。
这里有一个解决方案:
RangeCheck = function(range) {
this.init(range);
};
RangeCheck.prototype = {
constructor: RangeCheck,
/**
* The range map.
*/
range: null,
init: function (range) {
this.range = range || {};
},
putRange: function(name, max) {
this.range[name] = max;
},
check: function(number) {
for (var key in this.range) {
if (this.range.hasOwnProperty(key)) {
if (number <= this.range[key]) {
return key;
}
}
}
return key;
}
};
这样使用:
var rangeCheck = new RangeCheck({ small : 25, medium : 80, large : 150 });
var message = "15: " + rangeCheck.check(15) + "'n"
+ "25: " + rangeCheck.check(25) + "'n"
+ "85: " + rangeCheck.check(85) + "'n"
+ "850: " + rangeCheck.check(850) + "'n";
alert(message);
rangeCheck.putRange("veryLarge", 300);
var message = "15: " + rangeCheck.check(15) + "'n"
+ "25: " + rangeCheck.check(25) + "'n"
+ "85: " + rangeCheck.check(85) + "'n"
+ "850: " + rangeCheck.check(850) + "'n";
alert(message);
还有jsFiddle:http://jsfiddle.net/xKjt7/
只是为了好玩。使用underscore
:的一个衬垫
get_size = function (n) { return _.find(_.map({'small':100, 'big':200}, function (x,i) { return [x < n, i]; }), function (x) { return x[0] == false; })[1];};
相关文章:
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 输入字段,只接受0到12之间的数字
- 删除图形和数字之间的连字符(-)符号
- 计算HTML表TD中两个数字之间的百分比
- 通过变量在两个数字之间切换
- 在我的网站上创建一个在1-10之间不断变化的数字时遇到了问题.Javascript
- 如何创建一个确定2个数字之间值的函数
- 用于获取两个方括号之间的数字的正则表达式
- 在 javascript 中,将数字之间出现的所有“-”替换为“:”
- 正则表达式和 javascript:匹配数字后跟空格和大写字母之间的所有内容
- 剑道 UI - 自定义数字格式在 2015.3.1111 > 2016.1.412 之间更改
- Jquery if 在 2 个数字之间
- php中的函数或介于-200和200之间但不为零的数字
- 验证数字是否在0.00到20.00之间的正则表达式
- 如何在javascript中生成任意四个数字之间的随机数
- 验证javascript中的输入是否在2个数字之间
- 从1-9之间的随机数字列表中选出3个相同的数字
- 如何使除法符号在基本计算器的数字之间只出现一次
- 正则表达式用于验证两个范围之间的数字
- 需要用 Javascript 或 jQuery 替换 [..] 之间的数字