我正在尝试使用lodash.js
实现基于某些参数显示总线列表的过滤功能。
以下是过滤boardingPoint,droppingPoint,busType和operatorName的四个参数,它将填入4个下拉菜单中。
工作流
当用户选择一个登机点时,结果应该只包含选定登机点的公交车列表
如果他选择boardingPoint并且pausePoint结果应仅包含选定boradingPoint和丢弃点等的总线列表。
这是我的过滤功能
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个参数都有任何值时,上述内容才有效。
那么如何修改上面的表达式呢?它应该只包含用于过滤的选定参数
例如:如果用户选择了登机点和丢弃点(即bpLocations
,dpLocations
),则只有表达式应为此
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 &&
答案 0 :(得分:1)
首先,需要初始化finalvar。如果您在没有选择任何内容时根本不需要过滤器,我应该将其初始化为true,我假设它是您想要的逻辑。
其次,添加作业' + ='在这种情况下使用不正确。请检查here是否正确使用。
第三,&&是JavaScript运算符,它不能添加到另一个值。这就是您收到错误的原因。
这是修订后的代码,可以解决问题和预期的逻辑:
package sample;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.control.*;
import javafx.scene.shape.Polygon;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.ResourceBundle;
public class Controller implements Initializable{
private String path;
private ArrayList<File> files;
private String[] extens;
@FXML
public Polygon right_arrow;
public Polygon left_arrow;
public Button edit_button;
public ImageView home_button;
public TextField search_box;
public TextArea tag_box;
public ChoiceBox language_box;
public Label photo_title;
public Label photo_number;
public ImageView photo_box;
public Image home_picture;
public void goToEditPage (ActionEvent event) throws Exception {
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Edit.fxml"));
Parent root1 = (Parent) fxmlLoader.load();
Stage stage = new Stage();
stage.setScene(new Scene(root1));
stage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public void goToHomePage (){
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("home.fxml"));
Parent root1 = fxmlLoader.load();
Stage stage = new Stage();
stage.setScene(new Scene(root1));
stage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public Image getPicture(){
/*home_picture = new Image(String.valueOf(getClass().getResource("home.png")));
*/return home_picture;
}
private void photo (String pathGet){
path = pathGet;
files = new ArrayList<File>();
File repo = new File (path);
File[] fileList = repo.listFiles();
for (int i=0; i<1; i++) {
System.out.println(repo.list());
}
// System.out.println(fileList.length);
/*int nb = fileList.length;
String ext = "";
int s = -1;
for (int i=0; i<nb; i++){
if (fileList[i].isFile()){
s = fileList[i].getName().lastIndexOf(".");
if (s>-1) {
ext = fileList[i].getName().substring(s + 1);
}
if (ext=="jpg"||ext=="png"||ext=="jpeg"){
files.add(fileList[i]);
}
}
}*/
}
public File getPhotoById(int id) {
id--;
return this.files.get(id);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
photo("sample/photos/album_1");
//photo_box.setImage(new Image(files.get(1).toURI().toString()));
}
}