【问题标题】:Method for selecting text label based on numerical result?根据数值结果选择文本标签的方法?
【发布时间】:2014-01-21 10:10:43
【问题描述】:

我发现自己经常面临报告测验结果的问题。 Javascript 为我提供了产生客观分数的好方法(例如,20 个正确答案中的 10 个),但我不确定为该结果提供主观标签的最佳方法。例如,“你在 20 个正确答案中得了 10 个,这是一个平均结果。”

迄今为止,我一直以直截了当的方式这样做:

if (score > 15) {
    answerText = "excellent";
} else if (score > 10) {
    answerText = "average";
} else if (score > 5) {
    answerText = "below average";
} else {
   answerText = "poor";
}

不过,我想知道是否有更好的方法来解决这个问题。 switch 语句更好吗?

建议和意见表示赞赏!

【问题讨论】:

  • “更好”在什么方面?
  • 这似乎完全是“基于意见的”,这不是 StackOverflow 想要的。也许codereview.stackexchange.com 会是一个更好的地方。
  • 啊哈。之前没有遇到过 codereview.stackexchange。我会考虑把它移到那里去。

标签: javascript scoring


【解决方案1】:

这是解决此问题的完美方法。您也可以使用相反的switch 声明,但除了可能的新颖效果之外,它没有提供任何其他功能:

switch (true) {
    case score > 15:
        answerText = "excellent";
        break;
    case score > 10:
        answerText = "average";
        break;
    // etc
}

如果您想要更规范和可维护的东西,您可以创建一组阈值并按降序检查每个阈值,例如:

// This could also be an array of objects, but let's keep the PoC simple
var outcomes = [
    [15, "excellent"],
    [10, "average"],
    // ...
    [0, "poor"]
];

for (var i = 0; i < outcomes.length; ++i) {
    if (outcomes[i][0] <= score) {
        answerText = outcomes[i][1];
        break;
    }
}

【讨论】:

  • “规范且可维护”的解决方案符合我的要求。鉴于我经常遇到这种模式,我想要一些我可以通过最少的定制重复使用的东西,看起来它可能会奏效。谢谢,乔恩!
猜你喜欢
  • 2013-01-17
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2013-07-20
  • 1970-01-01
  • 2017-04-29
  • 2014-05-04
相关资源
最近更新 更多