我相对较新的JS,并希望找到最佳方法,根据动态条件将一个变量设置为另一个变量的另一个变量的子集。
在下面的示例中,
clickedCode
是一个在每次单击事件后都会更改的字符串(下面的所有代码都在click.event函数中)。
features
是一个包含400个元素的要素数组,每个元素都包含一个properties
对象,而该对象又包含纬度,经度等元素。
cities
是一个空数组
var clickedCode // dynamically changing string
var cities = [];
var features = map.queryRenderedFeatures({layers:['uni']});
例如,如果我记录第一个feature
的某些属性,我会看到:
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
我的目标是将features
放在features[i].properties.code
等于clickedCode
的位置,然后将cities
设置为等于生成的数组,以便大致:
cities = features where features[i].properties.code === clickedCode
任何有关在javascript中构建此内容的建议和解释都会有所帮助
答案 0 :(得分:3)
您可以使用Array.filter()
所以在你的情况下,它会是这样的:
var cities = features.filter(function (feature){
return feature.properties.code === clickedCode;
});
通过简单地将回调函数传递给过滤器(确保函数返回truthy / falsy值,否则可能会出现意外行为)。
答案 1 :(得分:1)
cities = features.filter(function(t)
{
return t.properties && // check is not null
t.properties.code === clickedCode;
});
内部函数为数组的每个元素运行并返回一个bool。
true =>返回元素
false =>过滤它
答案 2 :(得分:0)
您可以使用code
作为密钥创建字典(我认为它是唯一的)
然后通过字典密钥
clickedCode
var data = {}
features.each((feature) => {
data[feature.properties.code] = properties
cities.push(feature.properties.code)
})
console.log(data[clickedCode])
你也不再需要cities
了,因为
cities = Object.keys(data)