我正在使用 MultiChoice Widget 在 Bokeh 中创建一个图来过滤我的数据。我正在使用此 CustomJS 语句来过滤我的数据:
enter var s1 = source.data;
var selected = multi_choice.value;
var new_data= {};
new_data['Acidity']=[];
new_data['Chlorides']=[];
new_data['Density']=[];
new_data['Sulfates']=[];
new_data['Rating']=[];
function containsAny(source,target)
{
var result = source.filter(function(item){ return target.indexOf(item) > -1});
return (result.length > 0);
}
for (var i = 0; i < s1['Strain'].length; i++) {
if (containsAny(selected,s1['Strain'][i])) {
new_data['Acidity'].push(s1['Strain'][i])
new_data['Chlorides'].push(s1['THC_AVG'][i])
new_data['Density'].push(s1['CBD'][i])
new_data['Sulfates'].push(s1['IND'][i])
new_data['Rating'].push(s1['Rating'][i])}}
table_source.data = new_data
这段代码似乎工作得很好,除了当我输入要过滤的字符串时,它会选择包含我的字符串的所有选项以及确切的结果。我相当确定这是因为我选择的“containsAny”语句,但无法成功地将 containsAny 更改为包含 JS 中的“仅”或“等于”。
有人知道怎么做吗?
如果我没理解错的话,你希望过滤器只显示完全匹配,对吧?为此,您可以像这样修改 containsAny 函数:
function containsAny(source, target) {
return source.indexOf(target) > -1;
}
通过此更改,仅当目标字符串与源数组中的元素完全匹配时,该函数才会返回 true。您更新后的 CustomJS 代码现在应该如下所示:
var s1 = source.data;
var selected = multi_choice.value;
var new_data = {};
new_data['Acidity'] = [];
new_data['Chlorides'] = [];
new_data['Density'] = [];
new_data['Sulfates'] = [];
new_data['Rating'] = [];
function containsAny(source, target) {
return source.indexOf(target) > -1;
}
for (var i = 0; i < s1['Strain'].length; i++) {
if (containsAny(selected, s1['Strain'][i])) {
new_data['Acidity'].push(s1['Strain'][i]);
new_data['Chlorides'].push(s1['THC_AVG'][i]);
new_data['Density'].push(s1['CBD'][i]);
new_data['Sulfates'].push(s1['IND'][i]);
new_data['Rating'].push(s1['Rating'][i]);
}
}
table_source.data = new_data;
现在,过滤器应该按预期工作,只显示完全匹配。