Каким образом сделать такую проверку по массиву JS?

Добрый день есть такой массив

var arrayPositions = [493.19998931884766, 916.5999755859375, 1340, 1763.3999633789062, 2186.7999877929688, 2916.2001342773438, 3339.6000366210938, 4068.9999389648438, 4492.400085449219, 4915.799987792969]

10 координат. Это координаты элементов что я получаю через цикл each. У Jquery есть такая функция

$(window).on('scroll', function () {
      var scroll = $(window).scrollTop();
  });

Вопрос

Каким образом можно сделать такую проверку, что если var scroll имеет значения больше 0 элемента но меньше 1 , я получаю индекс 0 элемента. Если к примеру число больше 4 элемента но меньше 5 я получаю его индекс

И насколько правильно делать такую проверку в Window.Scroll. функцию. Ведь проверка будет каждый раз при каждом px


Ответы (2 шт):

Автор решения: vp_arth

Если решать в лоб:

const points = [1.5, 5.5, 8.5];

function getIndex(value, points) {
  for (let i = points.length; i >= 0; --i) {
    const point = points[i];
    if (point <= value) return i;
  }
  return -1;
}

for (let i=0; i<10; ++i) {
  console.log(i, getIndex(i, points));
}

→ Ссылка
Автор решения: Grundy

метод findIndex возвращает index первого элемента удовлетворяющего условию.

Таким образом можно проверить, какой из элементов больше переданного параметра, и из полученного индекса вычесть единицу.

var index = arrayPositions.findIndex(el=>el<scroll);
if(index == 0) { // если значение меньше нулевого элемента
    // ...
}

if (index == -1) { // если в массиве нет значения больше заданного
    index = arrayPositions.length-1; // индекс последнего элемента
}
→ Ссылка