Python CustomJS 过滤“包含”而不是“等于”

问题描述 投票:0回答:1

我正在使用 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 中的“仅”或“等于”。

有人知道怎么做吗?

javascript python python-3.x pandas bokeh
1个回答
0
投票

如果我没理解错的话,你希望过滤器只显示完全匹配,对吧?为此,您可以像这样修改 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;

现在,过滤器应该按预期工作,只显示完全匹配。

© www.soinside.com 2019 - 2024. All rights reserved.