Переменная меньше или больше значений в массиве?

Есть массив arY = [[100,200],[500,600],[900,1000]]. Заранее не известно кол-во массивов, может быть 1, может быть 10, в данном случае - 3.

Переменная Y = меняется от 0 до 1000.

как вывести Y, когда он не принимает значения 100-200, 500-600 и 900-1000.

Пример:

foreach(arY)
if(Y<arY[0]&&Y>arY[1])


Только через цикл можно построить условия или можно обойтись без цикла?
  • Вопрос задан
  • 274 просмотра
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Не в одну строчку, «не красиво», но эффективно – этот вариант самый быстрый из предложенных, в 4 раза быстрее варианта от Stalker_RED :
function isInRange( v, ranges) {
  var i, pair;
  for( i = 0; i < ranges.length; i++) {
    pair = ranges[i];
    if( v > pair[0] && v < pair[1]) return true;
  }
  
  return false;
}
if( false === isInRange( Y, arY)) console.log( Y, "not in range");


Хипста фэнси:
arY.reduce((p,c) => (p || (Y<c.pop() && Y>c.pop())), false)

Вернёт true, если попадает в диапазон. Но это тупой вариант, и проверит все пары.
Ответ написан
Stalker_RED
@Stalker_RED
var ranges = [[100,200],[500,600],[900,1000]];

var checkInRange = (ranges, x) => ranges.some(range => x > range[0] && x < range[1]);

console.log(checkInRange(ranges, 50));
// -> false
console.log(checkInRange(ranges, 101));
// -> true
https://jsfiddle.net/oveu6gz1/

Это-же можно записать более понятным образом:
function checkInRange(ranges, x) {
  return ranges.some(function(range) {
    return x > range[0] && x < range[1])
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы