jQuery循环将多个数组组合在一起-Mapbox-map.setFilter()

jQuery loop to put together multiple arrays - Mapbox map.setFilter()

本文关键字:-Mapbox-map 在一起 setFilter 组合 数组 循环 jQuery      更新时间:2023-09-26

Mapbox的新GL API已被证明难以使用。我想知道我是否可以通过jQuery的每个函数来构建一个具有这种奇怪格式的数组。

我正在创建一个带有类别复选框的表单,该复选框将过滤地图上显示的标记。我使用$.each()循环来获取检查的输入,获取它们的ID,并将其放入每个数组的中间。一个选中的输入是一个数组。

基本上,我需要把数组放在一起:

map.setFilter('markers', ["any",
   ['in',c1,true],
   ['in',c2,true], // these 3 arrays
   ['in',c3,true]
] );

但很明显,我需要在检查时动态地完成这项工作。以下是我想使用的不完整的jQuery:

jQuery('input.checkbox-child').change(function(){
    args = new Array();
    jQuery('input.checkbox:checked').each(function(){
        id = jQuery(this).attr('id');
        filter = ['in',id,true];
        // ???
    });
    map.setFilter('markers', ["any", args] );
});

不知道如何将filter变量连接在一起以形成逗号分隔的数组列表,类似于在setFilter函数中使用的['in',id,true],['in',id,true],['in',id,true]...

我认为这应该适用于您想要的

var args = [];
jQuery('input.checkbox-child').change(function(){
    jQuery('input.checkbox:checked').each(function(){
        var id = jQuery(this).attr('id');
        var filter = ['in',id,true];
        args.push(filter);
    });
    map.setFilter('markers', ["any"].concat(args));
});