GAS如何通过数组方法筛选指定字段含非空文本的数组记录?
非空筛选的正确写法
你之前测试的判断条件都是表格函数的语法,不适用于JavaScript原生的数组filter方法,按以下规则修改即可:
核心判断逻辑
如果要保留指定字段(示例中是索引为1的第二列)有实际文本内容的记录,直接在filter回调中判断对应字段值非空即可,兼容假空、异常值的写法如下:
var Ss = SpreadsheetApp.getActiveSpreadsheet(); var DataSheet = Ss.getSheetByName("VolunteerListTbl");//数据源表 var LstRowNum = DataSheet.getLastRow(); var LstColNum = DataSheet.getLastColumn(); // DataSheetRangeValues 为完整数据集数组 var DataSheetRangeValues = DataSheet.getRange(3,1, LstRowNum , LstColNum).getValues(); // 非空筛选逻辑 var FilteredData = DataSheetRangeValues.filter(function(e){ // 仅保留索引为1的列非空的记录,调整方括号内的数字即可切换筛选字段 return e[1] && e[1].toString().trim() !== ""; }); var NewSheetName = "CustomSearch_Tbl"; //可自定义结果表名 var C_SrchResSheet = Ss.getSheetByName(NewSheetName); // 写入筛选结果到新表 C_SrchResSheet.getRange(3,1,FilteredData.length,LstColNum).setValues(FilteredData); RecordsFound = FilteredData.length;
逻辑说明
- 前置
e[1]判断可以自动过滤null、undefined这类异常空值 toString()避免数字、日期类型的有效值被误判为空trim()可以排除单元格仅含空格的假空场景,如果你不需要过滤纯空格,直接简写为return e[1] !== ""即可
内容的提问来源于stack exchange,提问作者Charles Gray
相关产品推荐
相关产品推荐

