基于数组的Mapbox过滤器

时间:2017-08-09 16:51:13

标签: mapbox mapbox-gl-js mapbox-gl

我有以下数组:

test = ['a', 'b', 'c']

我想过滤地图上的对象(如果它们存在于数组中)。 是否可以将此过滤器与数组一起使用:

mapObj.setFilter("hover", ['all', ["in", "letter", test[0]]]);

或者,或者,过滤数组中存在的对象的最佳方法是什么?

3 个答案:

答案 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;
&#13;
&#13;

答案 1 :(得分:0)

您还可以使用:

['in', 'letter'].concat(test);

test是您的值数组。

答案 2 :(得分:0)

["in", "letter", ...test]在ES6中

应该工作。