javascript - 用于确定数值落入哪个范围的优雅解决方案

标签 javascript numbers

如果我为一个函数提供一个数字,我将如何根据像这样的一系列数字来验证它?

1-10  = A
11-20 = B
21-30 = C
...

我知道我可以执行 if 语句来评估它,但我正在寻找更优雅的东西,因为问题变得更加复杂,我不想要一个令人讨厌的 ifs 网络。

var letter = "";

function getLetter(num) {
  if (num >= 1 && num <= 10) {
    letter = "A";
  } else if (num >= 11 && num <= 20) {
    letter = "B";
  }
  // this eventually gets gross
}

getLetter(14) 的预期结果为 "B",而 getLetter(49) 的预期结果为 "E" 等。出于类似原因,case/switch 也不在讨论范围内。

欢迎任何其他想法。

最佳答案

关于您的代码的一点

function getLetter(num) {
  if (num >= 1 && num <= 10) {
    letter = "A";
  } else if (num >= 11 && num <= 20) {
    letter = "B";
  }
  // this eventually gets gross
}

这可以简化为

function getLetter(num) {
  if (num >= 1) {
    if(num <= 10) {
      letter = "A";
    } else if (num <= 20) {
      letter = "B";
    }
    // this eventually gets gross too
  }
}

但是:

如果简单到每个字母代表 10 个值的范围:

function getLetter(num) {
  return String.fromCharCode(65 + Math.floor((num - 1) / 10));
}
console.log(getLetter(1));
console.log(getLetter(14));
console.log(getLetter(49));

或按照建议

function getLetter(num) {
  const ret = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  return ret[Math.floor((num - 1) / 10)] || "+"; // greater than 260
}
console.log(getLetter(1));
console.log(getLetter(14));
console.log(getLetter(49));
console.log(getLetter(261));

function getLetter(number) {
  let ranges = {
    a: 10,
    b: 20,
    c: 30,
    underflow: 0,
    overflow: Infinity
  }

  return Object.entries(ranges)
  .sort(([ka, va], [kb, vb]) => va - vb) // because object key sort order isn't guaranteed
                                         // though it will be in the order as declared, but
                                         // sorting makes sense
  .find(([key, value]) => number <= value)[0];
}

console.log(getLetter(5))
console.log(getLetter(17))
console.log(getLetter(20))
console.log(getLetter(30))
console.log(getLetter(31))
console.log(getLetter(0))

如果范围是连续的,你只需要一个边界

关于javascript - 用于确定数值落入哪个范围的优雅解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513895/

相关文章:

javascript - 未加载动态添加的 CSS 文件

javascript - 正则表达式从字符串中拆分数字

C 计算一个数字出现的次数

javascript - JQuery复杂类和ID排序

javascript - 如何选择具有特定 ID 的 d3 svg 路径

javascript - 执行脚本Webview JavaFx

java - 如何将 Java JSpinner 数字转换为 int?

javascript - 如何检测给定的数字是否是整数?

perl - 在perl中四舍五入小数,结果错误

javascript - 第二次单击时删除附加数据