HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavascriptMinor

Getting a compass point from 140°

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
point140gettingcompassfrom

Problem

This JavaScript converts degrees to a compass point, e.g. convert.toCompass(140) gets 140° -> SE.

I can't help but think: is there a more concise way to do this?

var convert = {
    toCompass: function(degrees)
    {
        if(degrees >= 0 && degrees  11.25 && degrees  33.75 && degrees  56.25 && degrees  78.75 && degrees  101.25 && degrees  123.75 && degrees  146.25 && degrees  168.75 && degrees  191.25 && degrees  213.75 && degrees  236.25 && degrees  258.75 && degrees  281.25 && degrees  303.75 && degrees  326.25 && degrees  348.75 && degrees <= 360)
        {
            return 'N';
        }
    }
}

Solution

By looking at values in your series of if's, you can make an array ([]), then calculate which index to pick:

var convert = {
    toCompass: function(degrees)
    {
        return ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW', 'N'][Math.round(degrees / 11.25 / 2)];
    }
}

alert(convert.toCompass(140));      // SE


JSFiddle demo

Code Snippets

var convert = {
    toCompass: function(degrees)
    {
        return ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW', 'N'][Math.round(degrees / 11.25 / 2)];
    }
}

alert(convert.toCompass(140));      // SE

Context

StackExchange Code Review Q#38613, answer score: 7

Revisions (0)

No revisions yet.