如何在Google Apps Script中实现多参数筛选API
实现多参数组合筛选的Google Sheets API
你的现有代码通过else if分支判断,只会匹配第一个非空参数,无法实现多参数同时过滤的需求。要解决这个问题,我们可以先收集所有有效的查询条件,再对数据进行多条件同时校验的过滤。
修改后的完整代码
function doGet(req) { // 获取所有查询参数 const params = req.parameter; const doc = SpreadsheetApp.getActiveSpreadsheet(); const sheet = doc.getSheetByName('chat_animeit'); const values = sheet.getDataRange().getValues(); // 构建原始数据数组 let output = []; for(let i = 1; i < values.length; i++) { const row = {}; row['ID'] = values[i][0]; row['UID'] = values[i][1]; row['Nome'] = values[i][2]; row['Perfil'] = values[i][3]; row['Mensagem'] = values[i][4]; output.push(row); } // 建立参数与数据字段的映射关系 const paramFieldMap = { id: 'ID', nome: 'Nome', uid: 'UID', msg: 'Mensagem' }; // 收集所有非空的查询条件 const filters = []; for(const [paramKey, fieldName] of Object.entries(paramFieldMap)) { const paramValue = params[paramKey]; if(paramValue != null) { // 为每个非空参数生成对应的过滤函数 filters.push(obj => { const fieldValue = obj[fieldName].toString().toLowerCase(); return fieldValue.includes(paramValue.toString().toLowerCase()); }); } } // 应用所有过滤条件(多条件同时满足) if(filters.length > 0) { output = output.filter(row => filters.every(filter => filter(row))); } // 返回JSON结果 return ContentService.createTextOutput(JSON.stringify({"results": output})) .setMimeType(ContentService.MimeType.JSON); }
关键修改说明
参数映射与条件收集:
- 用
paramFieldMap统一管理URL参数和数据字段的对应关系,后续新增参数只需在这里添加映射,无需修改过滤逻辑。 - 遍历所有参数,将非空的参数转换为对应的过滤函数,存入
filters数组。
- 用
多条件过滤逻辑:
- 使用
Array.every()方法,确保只有满足所有过滤条件的行才会被保留,实现多参数的“与”逻辑(比如?id=2&msg=coisas会同时校验ID包含2且Mensagem包含coisas)。
- 使用
代码简化:
- 去掉了原代码中重复的分支判断,统一处理所有参数,代码更易维护。
内容的提问来源于stack exchange,提问作者Ninguém Joga 2
相关产品推荐
相关产品推荐

