我以前使用以下方法过滤功能:

for (var i=0; i<features.length; i++)
 {
 if (features[i].attributes.color == 'blue')
.
.


但有时值可能是:深蓝色,浅蓝色等
所以我使用了match但仍然无法正常工作:

var x = "blue";
 if (features[i].attributes.color.match(new RegExp(x, "ig")))


我收到此错误:

Cannot call method 'match' of undefined

最佳答案

似乎某些功能没有设置颜色属性。运行,例如:

for (var i=0; i<features.length; i++)
    console.log(typeof features[i].attributes.color);


您可以在未定义的属性上使用==,但是不能在其上运行函数,这说明了为什么== 'blue'不会引发错误。

var foo = {bar: 'Test'};
// That doesn't throw error
if (foo.baz == 'blue') console.log('Is blue');
// And that throws error
if (foo.baz.match(new RegExp('blue', 'ig'))) console.log('Is blue');


因此,您应该首先测试是否设置了color属性,然后对其进行测试:

for (var i=0; i<features.length; i++)
    if (features[i].attributes.color && features[i].attributes.color == 'blue') ...

关于javascript - Javascript/OpenLayers匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13900966/

10-12 22:10