2017-02-25 8 views
1

マイオブジェクト は私のOBJオブジェクト内をループして、オブジェクト内のある範囲の数値に一致する方法は?ここで

obj = [ 
    { 
     a: [1, 91] 
    }, 
    { 
     b: [91, 399] 
    }, 
    { 
     c: [399, 409] 
    } 
] 

である私は、ユーザーがマウスを追跡し、変数に格納しています:

userMouse = event.clientX; 

clientXは、オブジェクト要素の一つであるかどうかを確認するにはどうすればよいですそれがオブジェクトのインデックスを与えるのであれば?

純粋なJSでこれを行うライブラリはありません。

+1

数字の範囲は何を意味しますか?彼らはX座標値ですか? – trincot

+0

私はdivを持っており、私はどのdivにマウスが入るのか興味があります。マウスがdivに入る場所に応じて、私はエフェクトを表示します。 –

+0

解決策についてより具体的に質問を更新しました。 –

答えて

1

それが唯一の私は、各オブジェクトの最小数の間に設定されなければならなかった、実際にはあまりにも簡単でしたそして最も大きい。なぜフィルタ関数の最後に[0]を置く必要があるのか​​理解できません。

idx = obj.findIndex(({ elementRange: [low, high] }) => low <= x && x < high); 

しかし、目標は特定のx、yの要素を検索する場合、その後、elementFromPointを見て:あなたはとてもあなたが行うことができ、X与えため、findIndexを使用することができます

var object = obj.filter(function(obj) { 
       return event.clientX > obj.a[0] && event.clientX < obj.a[1]; 
        })[0]; 
+1

フィルターは配列を返すので、[0]を実行すると、最初のオカレンスを返します。 – rasmeister

0

私は本当にあなたを理解していれば、あなたは番号を検索するには、ある要素の範囲の間:

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 
} 
+0

私はそれを.filter –

+0

で見つけ出しました。あなたは言った*たとえば、フィルタでそれを行う方法*。 –

+0

私はフィルタを使っています。しかし、私はまだオブジェクトインデックスを取得する方法を理解していません。私は現在、一致するデータを返すことができますが、obj内のその要素のインデックスは何ではありません。 –

2

elem = document.elementFromPoint(x, y); 
+0

オブジェクト要素をループして変数を各要素の範囲と比較し、その範囲に一致する要素インデックスを返す方法として、DIVについての質問はあまりありません。 –

+0

私は 'div'を言っていませんでしたが、あなたの質問にマウス座標が記載されているので、あなたは確かにマウスポインタの位置に関連する画面上の要素を参照しています。あなたの質問はそれについて詳細を述べていないので、単なる示唆です。範囲検索に関しては、 'findIndex'が必要です。 – trincot

0
//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)) 

Live Demo

関連する問題