重构JavaScript函数结果

时间:2018-07-06 16:15:51

标签: javascript leaflet refactoring

我正在使用Leaflet的Mapping API进行项目。现在,我正在清理我的代码,有一部分我觉得可以做得更好。

找到位置后,我对其进行了设置,同时对位置进行了准确性和范围检查:

function checkLocation(position)
{
    if(position.accuracy > 100)
    {
        return 4;
    }
    else if((position.latlng.lat <= **bound** || position.latlng.lat >= **bound**) || (position.latlng.lng >= **bound** || position.latlng.lng <= **bound**))
    {
        return 5;
    }
    return 0;
}

基本上,如果精度太低,则会抛出错误代码4的错误。如果坐标超出了我希望的位置,则会抛出错误代码5的错误(这些均与Leaflet的内置函数相对应)错误代码1-3,以便稍后再打开)。我返回0只是说没有错误。

此功能由locationFound事件调用,该事件具有以下代码:

var temp = checkLocation(position);
if(temp != 0)
{
    // Handle error code
    return;
}

这也可以,但是我不喜欢它的外观。我想要的是仅占用两到三行,最好没有if语句。我最初在此部分中拥有用于checkLocation的代码,但我认为单独拥有它可以使代码更简洁,更易于阅读。

我的问题是有什么办法可以改善这一点?我调查了lambda表达式,但认为不合适,因此尝试使用Promise,但是到那时,我正在减少行数以减少行数。我不想编写代码,但是我对JavaScript还是很陌生,不知道有什么方法可以简化它,同时又看起来很专业。如果要改善代码,我也打算更改checkLocation函数。

1 个答案:

答案 0 :(得分:0)

如果您要重构:

function invalidAccuracy(position) {
    return position.accuracy > 100; 
}

function outOfBounds(position) {
    return (position.latlng.lat <= **bound** || position.latlng.lat >= **bound**) || (position.latlng.lng >= **bound** || position.latlng.lng <= **bound**);
}

您可以这样处理:

function checkLocation(position) {
    if(invalidAccuracy(position)) 
        return 4;

    if(outOfBounds(position)) 
        return 5;

    return 0;
}

您可以(如果需要)将其放在1行中:

return invalidAccuracy(position) ? 4:
       outOfBounds(position) ? 5 :
       0;