提问者:小点点

标识给定数字在对象数组中落在哪个范围内


我有一个像这样的对象数组

const score_card = [
        { "range":"0.6-1.5", "point":"10"},
        { "range":"1.6-2.5", "point":"20"},
        { "range":"2.6-3.5", "point":"30"},
        { "range":"3.6-4.5", "point":"40"},
        { "range":"4.6+", "point":"50"}
    ]    

现在,如果我收到一个数字1.7,那么我需要找出它落在哪个范围内,所以在我的例子中,它落在1.6-2.5,它的相关点是20。

由于score_card数组将一直是相同的,所以我使用了switch case,如下所示:

let number = 1.7

switch(number) {
   case (number>=0.6 || number<=1.5):
             console.log('points : 10')
             break;
   case (number>=1.6 || number <=2.5):
            console.log('points : 20')
              break;
   case (number >=2.6 || number <=3.5):
            console.log('points : 30')
             break;
   case (number>=3.6 || number<=4.5):
            console.log('points : 40')
             break;
   case (number>=4.6):
             console.log('points : 50')
             break;
   default:
        console.log('none')
                  
}    

现在的问题是,我们在switch case中传递的数字(在我们的示例1.7中)是数组的一部分,而这个switch case是在循环中写入的,以便一个接一个地获得数字,这使得代码更长,而且可能更慢,我必须为不同的情况多做4次。那么有没有人能帮我,建议我一个有效处理这件事的方法呢?


共1个答案

匿名用户

您必须对最后一个条件/范围进行更改

const score_card = [
    { "range": "0.6-1.5", "point": "10" },
    { "range": "1.6-2.5", "point": "20" },
    { "range": "2.6-3.5", "point": "30" },
    { "range": "3.6-4.5", "point": "40" },
    { "range": "4.6+", "point": "50" }
]

const getPoints = score => {
    let points = 0;
    score_card.some(slab => {
        let [low, high] = slab.range.split('-');
        if (score >= +low && score <= +high) points = +slab.point;
    })
    return points;
}