确定数值落入哪个范围的绝佳解决方案

dav*_*qet 1 javascript numbers

如果我向函数提供数字,我将如何针对像这样的数字范围进行验证?

1-10  = A
11-20 = B
21-30 = C
...
Run Code Online (Sandbox Code Playgroud)

我知道我可以做一些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
}
Run Code Online (Sandbox Code Playgroud)

的预期结果getLetter(14)将为"B",并且getLetter(49)将为"E",等等。出于类似原因,案例/切换也不在讨论之列。

任何其他想法都欢迎。

Bra*_*avo 6

一点关于您的代码

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

这可以简化为

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

但:

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

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

或按照建议

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

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

如果范围是连续的,则只需边界之一

  • @daveycroqet Light的答案似乎很好……它的间隔甚至可以修改 (3认同)
  • 或者,如果您想让自己的字母更自由一些:将它们存储在数组中并从数组中获取索引。 (2认同)