Javascript 如何在对象中循环并匹配对象中一系列数字中的一个数字?
我的对象 这是我的objJavascript 如何在对象中循环并匹配对象中一系列数字中的一个数字?,javascript,loops,object,Javascript,Loops,Object,我的对象 这是我的obj obj = [ { a: [1, 91] }, { b: [91, 399] }, { c: [399, 409] } ] 我正在跟踪用户鼠标并将其存储在变量中: userMouse = event.clientX; 如何检查clientX是否在某个对象元素范围内,以及是否提供该对象的索引 请在纯JS无库中执行此操作。如果我真的了解您,您希望找到介于哪个元素范围之间的
obj = [
{
a: [1, 91]
},
{
b: [91, 399]
},
{
c: [399, 409]
}
]
我正在跟踪用户鼠标并将其存储在变量中:
userMouse = event.clientX;
如何检查clientX是否在某个对象元素范围内,以及是否提供该对象的索引
请在纯JS无库中执行此操作。如果我真的了解您,您希望找到介于哪个元素范围之间的数字:
var num=100;
for(var i=0; i<obj.length; i++)
{
var rangeFirst = obj[i].elementRange[0];
var rangeSecond = obj[i].elementRange[1];
if(num>rangeFirst && num <=rangeSecond)
return obj[i].elementRange
}
var num=100;
对于(var i=0;irangeFirst&&num它实际上太简单了,我只需要将每个对象的数目设置在最小值和最大值之间。但是我不明白为什么我需要将[0]放在我的筛选函数的末尾
var object = obj.filter(function(obj) {
return event.clientX > obj.a[0] && event.clientX < obj.a[1];
})[0];
var object=obj.filter(函数(obj)){
返回event.clientX>obj.a[0]&&event.clientX
您可以使用,因此对于给定的x,您可以执行以下操作:
idx = obj.findIndex(({ elementRange: [low, high] }) => low <= x && x < high);
//设置变量
设bj=[{
元素范围:[1,91]
}, {
元素范围:[91399]
}, {
元素范围:[399409]
}]
设x=10
//您正在寻找的函数[应该在任何地方都可用(浏览器)]
函数getIndex(bj,x){
//迭代
为了(让我进入北京){
if((bj[i].elementRange[0]x)){
//如果匹配,则返回索引
返回i;
}
}
返回-1;
}
//试验
console.log(getIndex(bj,1))
console.log(getIndex(bj,100))
console.log(getIndex(bj,10))
数字范围的含义是什么?它们是X坐标值吗?我有div,我对鼠标输入的div感兴趣。根据鼠标在div中输入的位置,我会显示效果。我已经更新了问题,以更具体地说明解决方案。但是要了解div
,可以使用document.elementFromPoint(X,y);
我用.filter解决了这个问题。filter意味着你只需要filter任务?例如,你说过如何用filter完成它。我已经用filter完成了。但我仍然不知道如何检索对象索引。我目前可以返回匹配的数据,但不能返回obj中该元素的索引。Frazin,你忘了在l之后还有一个“;”ength:)问题不在于DIV,而在于如何循环对象元素,并将变量与每个元素的范围进行比较,然后返回与范围匹配的元素索引。我没有说DIV
,但因为您的问题提到了鼠标坐标,您肯定是在引用屏幕上与鼠标指针位置相关的元素。这只是一个建议,因为你的问题没有详细说明。关于范围搜索,findIndex
应该是您所需要的。filter返回一个数组,所以执行[0]就是说给我第一个匹配项。
elem = document.elementFromPoint(x, y);
//setting variable
let bj = [{
elementRange: [1, 91]
}, {
elementRange: [91, 399]
}, {
elementRange: [399, 409]
}]
let x = 10
//function you are looking for [should work everywhere (browsers)]
function getIndex(bj,x){
//iterate
for (let i in bj) {
if ( (bj[i].elementRange[0]<x) && (bj[i].elementRange[1]>x)){
//return index if match
return i;
}
}
return -1;
}
//Test
console.log(getIndex(bj,1))
console.log(getIndex(bj,100))
console.log(getIndex(bj,10))