我有以下数组:
test = ['a', 'b', 'c']
我想过滤地图上的对象(如果它们存在于数组中)。 是否可以将此过滤器与数组一起使用:
mapObj.setFilter("hover", ['all', ["in", "letter", test[0]]]);
或者,或者,过滤数组中存在的对象的最佳方法是什么?
答案 0 :(得分:4)
好mapbox的setFilter函数不接受数组作为参数。您将需要使用适合其API的格式,这基本上在"设置成员资格过滤器"。
下进行了描述。https://www.mapbox.com/mapbox-gl-js/style-spec/#types-filter
要过滤多个变量,“设置成员资格过滤器”需要特定的格式
["in", key, v0, ..., vn]
其中v0到vn是数组中产生
的元素 ["in", "letter", "a", "b", "c"]
可以写一个函数将数组转换为这种格式。也许是这样的:
function buildFilter(arr) {
var filter = ['in', 'letters'];
if (arr.length === 0) {
return filter;
}
for(var i = 0; i < arr.length; i += 1) {
filter.push(arr[i]);
}
return filter;
}
var filterBy = ['a', 'b', 'c'];
var myFilter = buildFilter(filterBy);
console.log(myFilter);
// then you would use it like this:
// mapObj.setFilter("hover", buildFilter(['a', 'b', 'c']));
&#13;
答案 1 :(得分:0)
您还可以使用:
['in', 'letter'].concat(test);
test
是您的值数组。
答案 2 :(得分:0)
["in", "letter", ...test]
在ES6中
应该工作。