2017-02-25 8 views
1

Mein Objekt Hier ist mein objWie wird ein Objekt durchlaufen und eine Zahl in einem Zahlenbereich in einem Objekt gefunden?

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

ich den Benutzer Maus am Tracking und in einer Variablen zu speichern:

userMouse = event.clientX; 

Wie kann überprüfen, ob die clientX in einem der Objektelement ist Bereiche und wenn es den Index dieses Objekts geben soll?

Tun Sie dies in reinem JS keine Bibliotheken pls.

+1

Was bedeuten die Nummernkreise? Sind sie X-Koordinatenwerte? – trincot

+0

Ich habe divs und ich bin daran interessiert, in welche div die Maus eingegeben wird. Je nachdem, wo die Maus in das Div eingeht, zeige ich einen Effekt. –

+0

Ich habe die Frage aktualisiert, um genauer auf die Lösung einzugehen. –

Antwort

1

Es war eigentlich zu einfach, nur ich tun musste, ist zwischen der kleinsten Nummer jedes Objekt festgelegt in und das größte. verstehe aber nicht, warum ich die [0] am Ende meiner Filterfunktion setzen muss.

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

Filter gibt ein Array zurück, also indem Sie [0] sagen, geben Sie mir das erste Vorkommen. – rasmeister

0

Wenn ich Sie wirklich zu verstehen, wollen Sie die Zahl finden, ist zwischen dem Element Bereich:

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

verwenden. Ich fand es heraus mit .filter –

+0

Es bedeutet, dass Sie nur Filtertask wollen? Du hast gesagt * Zum Beispiel wie man es mit Filter * macht. –

+0

habe ich mit Filter gemacht. Aber ich verstehe immer noch nicht, wie ich den Objektindex abrufen kann. Ich kann derzeit die Daten zurückgeben, die Übereinstimmungen sind, aber nicht, was der Index dieses Elements im Objekt war. –

2

Sie können findIndex verwenden, so für ein bestimmtes x Sie tun können:

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

Aber wenn das Ziel ein Element für eine bestimmte x zu finden ist, y, dann Blick auf elementFromPoint :

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

die Frage ist nicht so viel über DIV als wie durch ein Objekt Elemente durchlaufen und vergleichen Sie Ihre Variable gegen den Bereich jedes Elements und geben Sie die Elemente Index, der den Bereich entspricht. –

+0

Ich habe nicht 'div' gesagt, aber da Ihre Frage Mauskoordinaten erwähnt, verweisen Sie sicher auf Elemente auf dem Bildschirm, die sich auf die Mauszeigerposition beziehen. Es ist nur ein Vorschlag, da Ihre Frage nicht mehr Details dazu enthält. Bei der Bereichssuche sollte 'findIndex' genau das sein, was Sie brauchen. – 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

Verwandte Themen