gpt4 book ai didi

JavaScript :Dynamic expression in filter function based on variable values

转载 作者:行者123 更新时间:2023-12-03 07:27:12 24 4
gpt4 key购买 nike

我正在尝试使用 lodash.js 实现过滤功能,以根据某些参数显示总线列表。

这里有四个参数用于过滤 boardingPoint、droppingPoint、busType 和 operatorName,它将填充在 4 个下拉菜单中。

工作流程

当用户选择登机点时,结果应仅包含具有选定登机点的巴士列表,

如果他选择了 boardingPoint 和 DropPoint,结果应该只包含具有选定的 boradingPoint 和 drop Point 等的公交车列表。

这是我的过滤函数

    function search_buses(bpLocations,dpLocations,busTypes,operatorNames){

//filter function
tresult = _.filter(result, function(obj) {

return _(obj.boardingPoints).map('location').intersection(bpLocations).value().length > 0
&&_(obj.droppingPoints).map('location').intersection(dpLocations).value().length > 0
&& _.includes(busTypes, obj.busType)
&& _.includes(operatorNames, obj.operatorName);
});
//return result array
return tresult;
}

但问题是,如果用户只选择了两个项目,即登机点和下车点,而其他项目为空,则上述过滤条件失败,因为它将评估四个条件。仅当所有 4 个参数都具有任意值时,上述内容才有效。

那么我如何修改上面的表达式,它应该只包含用于过滤的选定参数

例如:如果用户选择登机点和下车点(即 bpLocationsdpLocations ),则仅应使用此表达式

 tresult = _.filter(result, function(obj) {                  
return _(obj.boardingPoints).map('location').intersection(bpLocations).value().length > 0
&&_(obj.droppingPoints).map('location').intersection(dpLocations).value().length > 0
});

如果只选择busType,它应该是

tresult = _.filter(result, function(obj) {
return _.includes(busTypes, obj.busType)
});

更新

我只是根据每个变量是否为空来连接表达式字符串

//expression string
var finalvar;
tresult = _.filter(result, function(obj) {
if(bpLocations!=''){
finalvar+=_(obj.boardingPoints).map('location').intersection(bpLocations).value().length > 0;
}
if(dpLocations!=''){
finalvar+=&&+_(obj.droppingPoints).map('location').intersection(dpLocations).value().length > 0;
}
if(busTypes!=''){
finalvar+=&&+ _.includes(busTypes, obj.busType);
}
if(operatorNames!=''){
finalvar+=&&+ _.includes(operatorNames, obj.operatorName);
}
return finalvar;
});

但是它会返回这个错误Uncaught SyntaxError: Unexpected token &&

最佳答案

首先需要初始化finalvar。如果您在未选择任何内容时根本不需要任何过滤器,则应将其初始化为 true,我假设这是您想要的逻辑。

其次,在这种情况下,错误地使用了加法赋值“+=”。请查看here正确使用。

第三,&&是JavaScript运算符,它不能添加到另一个值。这就是您收到错误的原因。

这里是修改后的代码,可以解决问题和预期的逻辑:

// initialize to true means no filter if nothing is selected (return the item).  
var finalvar = true;

var tresult = _.filter(result, function(obj) {
if(bpLocations){
finalvar = finalvar && _(obj.boardingPoints).map('location').intersection(bpLocations).value().length > 0;
}
if(dpLocations){
finalvar = finalvar && _(obj.droppingPoints).map('location').intersection(dpLocations).value().length > 0;
}
if(busTypes){
finalvar = finalvar && _.includes(busTypes, obj.busType);
}
if(operatorNames){
finalvar = finalvar && _.includes(operatorNames, obj.operatorName);
}
return finalvar;
});

关于JavaScript :Dynamic expression in filter function based on variable values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35954304/

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