2017-01-26 3 views
0

Ich bin relativ neu in JS und würde gerne die beste Methode finden, um eine Variable gleich einer Teilmenge einer anderen Variablen basierend auf einer dynamischen Bedingung zu setzen.Variable auf Teilmenge von Array durch Bedingung in js setzen

Im Beispiel unten,

  • clickedCode ist eine Zeichenfolge, die nach jedem Klick Ereignisse ändert (unter dem gesamten Code innerhalb einer click.event Funktion ist).

  • features ein Array von Merkmalen mit 400 Elementen ist, die jeweils ein properties Objekt enthält, das wiederum Elemente wie Breitengrade enthält, Längengrad, usw.

  • cities ist eine leere Array

     var clickedCode // dynamically changing string 
         var cities = []; 
         var features = map.queryRenderedFeatures({layers:['uni']}); 
    
Wenn ich zum Beispiel einige Eigenschaften des ersten feature protokolliere, werde ich sehen:
var lon = features[0].properties.lon 
var lat = features[0].properties.lat 
var code = features[0].properties.code 

console.log("" + lon + " " + lat + " " + code); 

4.7005 50.8798 EMPHID

Mein Ziel ist die Teilmenge features wo features[i].properties.code zu clickedCode gleich und legen Sie dann cities gleich den resultierenden Array so, dass etwa:

cities = features where features[i].properties.code === clickedCode

Jede Beratung und Erklärung der Strukturierung dies wäre in Javascript hilfreich

Antwort

2

Sie Array.filter()

verwenden könnte

Also in Ihrem Fall wäre es in etwa so:

var cities = features.filter(function (feature){ 
    return feature.properties.code === clickedCode; 
}); 

Durch einfaches Übergeben einer Callback-Funktion an den Filter (stellen Sie sicher, dass die Funktion einen truthy/falsy-Wert zurückgibt, andernfalls könnten Sie unerwünschtes Verhalten erhalten).

+0

ja, das Array.filter() hat funktioniert! –

0

Sie können ein Wörterbuch mit 012 erstellenals Schlüssel (ich nehme an, es einzigartig ist) der Zugriff auf die clickedCode, indem sie durch das Wörterbuch der Schlüssel

var data = {} 
features.each((feature) => { 
    data[feature.properties.code] = properties 
    cities.push(feature.properties.code) 
}) 
console.log(data[clickedCode]) 

Sie Sie brauchen cities auch nicht mehr, weil

cities = Object.keys(data) 
+0

'code' nicht eindeutig zuzuordnen sind - es gibt mehrere Elemente in' features' mit dem gleichen Code wie 'clickedCode' = mein Ziel ist es zu filtern nur diese und erstellen Sie ein Array von ihnen –

+0

so ist die @Goliadkin Lösung die beste –

+0

Danke für Ihre Hilfe! –

0
cities = features.filter(function(t) 
     { 
      return t.properties && // check is not null 
        t.properties.code === clickedCode; 
     }); 

Die innere Funktion wird für jedes Element des Arrays ausgeführt und gibt ein Bool zurück.

true => Rückholelement

false => filtern es

Verwandte Themen