在javascript中实现类似vlookup的函数

在javascript中实现类似vlookup的函数,javascript,reactjs,sorting,Javascript,Reactjs,Sorting,我有一个处于React组件状态的对象,如下所示: const elementPositions = { "0": 180.2, "1": 350.8666666666667, "2": 521.5333333333333, "3": 692.2, "4": 862.8666666666667, "5": 1033.5333333333333, "6": 1204.2 } 我有一个scroll listener,它返回一个滚动位置值,在本例中,假设const scr

我有一个处于React组件状态的对象,如下所示:

const elementPositions =  {
  "0": 180.2,
  "1": 350.8666666666667,
  "2": 521.5333333333333,
  "3": 692.2,
  "4": 862.8666666666667,
  "5": 1033.5333333333333,
  "6": 1204.2
}
我有一个scroll listener,它返回一个滚动位置值,在本例中,假设
const scrollY=466

我需要创建一个返回滚动位置对应索引的函数,即
466
将返回1,因为它大于
350
但小于
521
。实现这一目标的最佳方式是什么?我一直在想这个问题,但不确定这是不是最好的方法:

const values = Object.values(elementPositions)
values.push(scrollY)
values.sort((a, b) => {return a-b})
const newIndex = values.indexOf(scrollY) - 1 

假设
elementPositions
是一个数组:

[180.2, 350.866, ...]
这将返回
O(n)
中的值(优于排序):


假设
elementPositions
是一个数组:

[180.2, 350.866, ...]
这将返回
O(n)
中的值(优于排序):


您的数字似乎是大约170的增量,因此您应该能够在恒定时间内使用算术(无排序、循环等)

常量元素位置={
"0": 180.2,
"1": 350.8666666666667,
"2": 521.5333333333333,
"3": 692.2,
"4": 862.8666666666667,
"5": 1033.5333333333333,
"6": 1204.2
};
函数getPos(x){
返回元素位置[数学楼层((x-180.2)/170.666)]|| 0;
}
//试验
(常数n为[0,10180181350351466522693862131033103412041205]){
console.log(n,getPos(n));

}
您的数字似乎是大约170的增量,因此您应该能够在固定时间内使用算术(无排序、循环等)

常量元素位置={
"0": 180.2,
"1": 350.8666666666667,
"2": 521.5333333333333,
"3": 692.2,
"4": 862.8666666666667,
"5": 1033.5333333333333,
"6": 1204.2
};
函数getPos(x){
返回元素位置[数学楼层((x-180.2)/170.666)]|| 0;
}
//试验
(常数n为[0,10180181350351466522693862131033103412041205]){
console.log(n,getPos(n));
}