Сожмите оператор if, чтобы найти диапазон значений - PullRequest
0 голосов
/ 28 июня 2018

Итак, я пытаюсь создать компасное приложение для Fitbit Ionic, оно работает, но этот кусок кода злит меня. Я знаю, что есть способ сократить это, но я не могу понять, как. Предполагается, что нужно взять целое число и сказать мне, каково соответствующее кардинальное направление.

Это выглядело бы намного лучше, если бы это, если бы утверждение могло быть сжатым. Любые советы или решения приветствуются.

geolocation.watchPosition(function(position) {
var headingDir;
var headingDeg;
headingDeg = position.coords.heading ? position.coords.heading.toFixed(2) : 0

//This long boi
 if (headingDeg >= 22.5 & headingDeg < 67.5) {
  headingDir = "NE";
 } else if (headingDeg >= 67.5 & headingDeg < 112.5) {
  headingDir = "E"
 } else if (headingDeg >= 112.5 & headingDeg < 157.5) {
  headingDir = "SE"
 } else if (headingDeg >= 157.5 & headingDeg < 202.5) {
  headingDir = "S"
 } else if (headingDeg >= 202.5 & headingDeg < 247.5) {
  headingDir = "SW"
 } else if (headingDeg >= 247.5 & headingDeg < 292.5) {
  headingDir = "W"
 } else if (headingDeg >= 292.5 & headingDeg < 337.5) {
  headingDir = "NW"
 } else {
  headingDir = "N"
 };

})

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

let headingDeg = 23;
let headingDir = '';

let headingObjArr = 
[
  {minDeg: 22.5, maxDeg: 67.5, value: 'NE'},
  {minDeg: 67.5, maxDeg: 112.5, value: 'E'},
  {minDeg: 112.5, maxDeg: 157.5, value: 'SE'}
]

headingDir = headingObjArr.find(function(element) {
  return headingDeg >= element.minDeg && headingDeg < element.maxDeg
});

console.log(headingDir.value)

Вы можете сохранить условие и результат как объект в массиве, используя find, чтобы получить значение

0 голосов
/ 28 июня 2018

Поскольку каждый диапазон отличается на одну и ту же величину (45), вы можете создать массив для строк направления, а затем немедленно рассчитать индекс нужной строки направления:

const headingStrs = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW', 'N'];
const getHeading = (deg) => headingStrs[Math.floor((deg + 22.5) / 45)];

console.log(getHeading(30)); // NE
console.log(getHeading(300)); // NW
console.log(getHeading(170)); // S
console.log(getHeading(22.5)); // NE
console.log(getHeading(15)); // N
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...