Javascript 如何创建确定两个数字之间的值的函数

Javascript 如何创建确定两个数字之间的值的函数,javascript,object,Javascript,Object,我有一系列的数字: 0 -------> 25 -------> 80 ------> 150 small medium large 我想接收一个介于0到150之间的数字,并显示它是小、中还是大。 30和45是中等的,因为它们介于25和80之间;5是小的,因为它们低于25 我想创建一个函数,该函数对此对象进行匹配: var sizeMap = { small : 25, medium : 80, large : 150 } (假设0是最小的

我有一系列的数字:

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)。我应该将对象表示为数组吗?

函数returnSize(number,sizeMap){
function returnSize(number, sizeMap) {
    for (var key in sizeMap) {
       if (number < sizeMap[key]) return key;
    }
    return key;
}
for(sizeMap中的var键){ if(number
只需返回满足“小于”条件的最大值:

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
}
函数返回大小(数字){
var项目;
用于(尺寸映射中的项目){
如果(编号
您应该使用一系列选项。由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;
  }
};
JSFIDLE:

要有一个数组,我更喜欢按所讨论的类别排序数组:

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!");
}
函数getSizeCategory(编号、类别){ 对于(变量i=0;i只是为了好玩。使用下划线的一行代码:

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];};
get_size=函数(n){return}.find({'small':100,'big':200},函数(x,i){return[x
我被一种方式吸引住了,我没想到这种方式能这么容易做到——谢谢!:)当您为(y中的x)执行
不能保证订单。在firefox中,它目前是按照指定的顺序进行的,因此使用以下2个将是大的:
returnSize(20,{large:150,medium:80,small:25})第92页(pdf格式104):“没有指定枚举属性的机制和顺序(第一个算法中的步骤6.a,第二个算法中的步骤7.a)。”我被一种方法吸引住了,我没有看到这种方法可以这么容易地完成-谢谢!)当您为(y中的x)执行
不能保证订单。在firefox中,它目前是按照指定的顺序进行的,因此使用以下2个将是大的:
returnSize(20,{large:150,medium:80,small:25})第92页(pdf格式104):“未指定枚举属性的机制和顺序(第一个算法中的步骤6.a,第二个算法中的步骤7.a)。”这也解决了我在列表与数组方面遇到的问题-感谢对它的简化。。
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];};