Каким образом сделать такую проверку по массиву 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 шт):
Если решать в лоб:
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));
}
метод findIndex возвращает index первого элемента удовлетворяющего условию.
Таким образом можно проверить, какой из элементов больше переданного параметра, и из полученного индекса вычесть единицу.
var index = arrayPositions.findIndex(el=>el<scroll);
if(index == 0) { // если значение меньше нулевого элемента
// ...
}
if (index == -1) { // если в массиве нет значения больше заданного
index = arrayPositions.length-1; // индекс последнего элемента
}