在js中按条件将变量设置为数组的子集

时间:2017-01-26 04:50:32

标签: javascript arrays

我相对较新的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中构建此内容的建议和解释都会有所帮助

3 个答案:

答案 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)