如何创建一个确定2个数字之间值的函数

How to create a function that determines value between 2 numbers

本文关键字:之间 数字 2个 函数 一个 何创建 创建      更新时间:2023-09-26

我有这个数字范围:

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];};