在jQuery中将得分与三个范围进行比较的最短方法

时间:2017-07-25 13:15:41

标签: javascript jquery if-statement

我有以下代码:

function display_message() {
    var low = data.result[0].max; //returns 30
    var medium = data.result[1].max; // returns 60
    var high = data.result[2].max; // returns 100

    // mypoints are 67 for example
    if(mypoints > low) {
        if(mypoints > medium) {
            alert('You got a high score');
        } else {
            alert('You got a medium score');
        }
    } else {
        alert('You got a low score');
    }
}

此代码工作正常。我将我的平均分数与标准低/中/高分进行比较。

低分:0-30 points
中等分数:31-60 points
高分:61-100 points

我的问题是如何使我的代码更漂亮?我不确定代码是否清晰有效。

非常感谢任何意见,谢谢

7 个答案:

答案 0 :(得分:3)

不需要if else,只需检查从最小到最高。

if (mypoints <= low) {
  //low msg
} else if (mypoints <= medium) {
  //medium msg
} else {
  //high msg
}

或者您可以朝相反的方向前进并检查最高的第一个是否大于

答案 1 :(得分:1)

您可以使用没有嵌套条件的条件。

if (mypoints > medium) {
    alert('You got a high score');
} else if (mypoints > low) {
    alert('You got a medium score');
} else {
    alert('You got a low score');
}

答案 2 :(得分:1)

在这里,我们迭代构成得分范围的各种值。循环将遍历每个得分范围依次,这意味着您需要获得最低分数,最高得分。然后,我们将分数名称保存为myscore,以便稍后提醒。

这种方法允许扩展 - 您可以在中间添加任意数量的得分范围,而无需再添加if / else块。

let data = {result: [{max: 30}, {max: 60}, {max: 100}]},
    mypoints = 67;

function display_message() {
  let score_range = {
      low: data.result[0].max, //returns 30
      medium: data.result[1].max, // returns 60
      high: data.result[2].max // returns 100
    },
    myscore = 'fail';

  for (var score in score_range) {
    if (score_range.hasOwnProperty(score)) {
      if (mypoints > score_range[score]) {
        myscore = score;
      }
    }
  }
  alert('You got a ' + myscore + ' score!');
}
display_message();

答案 3 :(得分:1)

您可以将消息存储在数组中,并找到正确的索引,如下所示:

[CV]  clf__max_depth=10, clf__learning_rate=0.01, clf__n_estimators=500 -119.5min
[CV]  clf__max_depth=10, clf__learning_rate=0.01, clf__n_estimators=500 -119.8min

魔法在一元加运算符中,它将比较返回的布尔值相应地转换为0或1。如果需要,还可以轻松添加更多排名。

答案 4 :(得分:0)

mypoints < low ? alert("you get low score") : (mypoints < medium ? alert("you get medium score") : alert("you get high score"))

答案 5 :(得分:0)

您可以使用switch声明

function display_message() {
    var low = data.result[0].max; //returns 30
    var medium = data.result[1].max; // returns 60
    var high = data.result[2].max; // returns 100

    switch (true) {
      case mypoints > medium:
        alert('You got a high score');
        break;
      case mypoints > low:
        alert('You got a medium score');
        break;
      default:
        alert('You got a low score');
    }   
} 

答案 6 :(得分:-1)

您可以创建一个函数,将得分和数组作为参数,使用不同的级别及其名称{"score": 30, "text": "You got a low score"},然后循环并输出最接近您发送的内容并返回匹配的文本

示例:

var myScore = 50,
    scoreIntervals = [{
            "score": 30,
            "text": "Low score"
        },{
            "score": 60,
            "text": "Average score"
        },{
            "score": 100,
            "text": "High score"
        }];

function evaluateScore(score, scoreIntervals) {
    var output = scoreIntervals[scoreIntervals.length - 1].text;
    $.each(scoreIntervals, function(key, val) {
        if(score <= val.score) {
            output = val.text;
            return false;
        }
    });
    return output;
}

console.log(evaluateScore(myScore, scoreIntervals));