У меня есть массив из семи значений, которые могут или не могут быть расширены. Тогда у меня есть переменная foo
которая находится между 1 и -1. На основе foo
я выбираю один элемент моего массива, но я не очень доволен текущим решением.
Есть ли предпочтительный способ сделать это?
Пример:
// Of course there useful data in no order like the alphabet
var myArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var foo = myFunc(); // Changes often between about 1 and -1
var index;
if (foo >= 0.1) {
index = 6;
} else if (foo < 0.1 && foo >= 0.0) {
index = 5;
} else if (foo < 0.0 && foo >= -0.1) {
index = 4;
} else if (foo < -0.1 && foo >= -0.2) {
index = 3;
} else if (foo < -0.2 && foo >= -0.3) {
index = 2;
} else if (foo < -0.3 && foo >= -0.4) {
index = 1;
} else {
index = 0;
}
var element = myArray[index];
Спасибо!
Вы можете использовать массив и Array#findIndex
для получения требуемого номера.
const getIndex = v => [-0.4, -0.3, -0.2, -0.1, 0, 0.1, Infinity].findIndex(a => v < a);
console.log(getIndex(-0.5)); // 0
console.log(getIndex(-0.4)); // 1
console.log(getIndex(-0.3)); // 2
console.log(getIndex(-0.2)); // 3
console.log(getIndex(-0.1)); // 4
console.log(getIndex(0)); // 5
console.log(getIndex(0.1)); // 6
console.log(getIndex(0.2)); // 6
.as-console-wrapper { max-height: 100% !important; top: 0; }
Было бы много способов сделать это, но простой может быть:
index = Math.floor(10 * (0.5 + foo));
if(index > 6) index = 6;
if(index < 0) index = 0;
int
и нет типов. Используйте Math.floor
Решение 1. Некоторое сравнение не требуется, вот более простая версия:
if (foo >= 0.1) {
index = 6;
} else if (foo >= 0.0) {
index = 5;
} else if (foo >= -0.1) {
index = 4;
} else if (foo >= -0.2) {
index = 3;
} else if (foo >= -0.3) {
index = 2;
} else if (foo >= -0.4) {
index = 1;
} else {
index = 0;
}
Решение 2:
double pos[6] = {0.1, 0.0, -0.1, -0.2, -0.3, -0.4};
int index = 0;
for (int i = 0; i < 6; i++) {
if (foo >= pos[i]) {
index = 6 - i;
break;
}
}
javascript
:-)