gpt4 book ai didi

javascript - 过滤搜索结果 typeahead.js

转载 作者:行者123 更新时间:2023-11-30 05:37:49 24 4
gpt4 key购买 nike

我有一个问题:我正在将过滤器传递给我的搜索结果:这工作正常,但是 typeahead.js 缓存已经搜索过的查询。

1.在选中我的过滤器时输入“spades”。 (7 个结果)

2.使用我的过滤器函数运行查询,以从我的数组中删除任何匹配过滤器的结果。 (5 场比赛)

3.禁用我的过滤器。

4.运行相同的查询“spades”,返回 2 个结果。 (预期 7 个结果,实际 2 个结果)

解决这个问题的最佳方法是什么?

var card_search = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('CARD_NAME'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
// prefetch: '',
remote: {
url : '/search/queries/%QUERY',
filter: testfilter
}
});

card_search.initialize();

过滤函数:

function testfilter(data)
{

$("input:checkbox[name=filtericons]:checked").each(function()
{
var filter = $(this).attr('id');
if(data.length > 0)
{

for (var i = 0; i < data.length; i++) {
var datum;
datum = data[i];
if ((typeof(datum.SUITE) != "undefined") )
{

for(var k=0; k< datum.SUITE.length;k++)
{
if( datum.SUITE[k] == filter)
{

// data[i]['CARD_VIS'] = 'none';
delete data[i];

}
}

}//end if

}

}

});

return data;
}

最佳答案

在 JavaScript 中,您通过引用传递数组。

所以当您执行 delete data[i] 时,我相信您正在删除从远程获取中缓存的数据。

在你的过滤器函数中,尝试:

function testfilter(remoteData)
{

var data = remoteData.slice();
$("input:checkbox[name=filtericons]:checked").each(function()
{
var filter = $(this).attr('id');
if(data.length > 0)
{

for (var i = 0; i < data.length; i++) {
var datum;
datum = data[i];
if ((typeof(datum.SUITE) != "undefined") )
{

for(var k=0; k< datum.SUITE.length;k++)
{
if( datum.SUITE[k] == filter)
{

// data[i]['CARD_VIS'] = 'none';
delete data[i];

}
}

}//end if

}

}

});

return data;
}

关于javascript - 过滤搜索结果 typeahead.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22519868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com