单张搜索过滤器仅精确匹配

时间:2020-07-13 04:53:28

标签: javascript search leaflet fuse.js

我正在使用Leaflet Search和Fuse.js来搜索多个小叶图层以及每个中的多个feature.properties。我终于使代码正常工作了(但是确实很混乱)。唯一的问题是,因为我使用的是filterData,所以当我搜索任何内容而不是完全匹配项时都会显示所有标记。

有什么方法只显示完全匹配?

var fuseOptions = {
  shouldSort: true,
  tokenize: true,
  threshold: 0,
  location: 0,
  maxPatternLength: 32,
  minMatchCharLength: 2,
  keys: ['properties.myKey']
};

    var fuse = new Fuse(city.features.concat(village.features.concat(gateway.features.concat(trade.features.concat(danger.features.concat(connect.features.concat(forest.features.concat(mine.features.concat(office.features.concat(farm.features.concat(fish.features.concat(annex.features)))))))))), fuseOptions), {
        keys: [
            'properties.name',
            'properties.prod1',
            'properties.extraprod1',
            'properties.extraprod2',
            'properties.extraprod3',
            'properties.extraprod4',
            'properties.extraprod5',
            'properties.buff',
            //'properties.operator'
        ]
    });
    L.control.search({
           initial: false,
           layer: allLayers,
           collapsed: false,
           casesensitive: false,
           propertyName: 'name',
           container: 'findbox',
       filterData: function(text, records) {
            var jsons = fuse.search(text),
                ret = {}, key;
            
            for(var i in jsons) {
                key = jsons[i].properties.name;
                ret[ key ]= records[key];
            }

            console.log(jsons,ret);
            return ret;
        }
    })
    .on('search:locationfound', function(e) {
        e.layer.openPopup();
    })
    .addTo(map);

1 个答案:

答案 0 :(得分:0)

我不确定这项工作是否可行,但请尝试:

filterData: function(text, records) {
            var jsons = fuse.search(text),
                ret = {}, key;
            
            for(var i in jsons) {
                key = jsons[i].properties.name;
                if(key.startsWith(text)){
                    ret[ key ]= records[key];
                }
                // Try with and without this line
                else { rect[key] = null; }
            }

            console.log(jsons,ret);
            return ret;
        }
相关问题