Google Sheets Apps Script FILTER返回空数组导致下拉列表无数据问题
问题原因
你遇到的filter返回空数组的核心原因是日期对象的比较逻辑错误:
Google Sheets中设置为日期格式的单元格,通过getValue()方法获取到的值是JavaScript的Date对象。直接用==或===比较两个Date对象时,实际比较的是对象的内存引用地址,而非日期的实际数值。哪怕两个Date对象代表的年月日完全一致,只要是不同的实例,比较结果都会是false,因此筛选不到匹配条目。
修复方案
将两个日期统一转为可直接比较的数值(时间戳)或格式化字符串即可解决问题,推荐修改filter判断逻辑如下:
var prodTypeList = MainData.filter(function(item){ // 把两个日期都转为毫秒级时间戳,比较数值即可判断是否为同一天 return new Date(item[0]).getTime() === new Date(prodDate).getTime() && item[1] === machine; })
如果你的日期列存在时分秒数据,只需比较年月日的话,可以用以下方法把时间部分清零后再比较:
// 提取日期的0点时间戳,忽略时分秒 function getPureDateStamp(inputDate) { const d = new Date(inputDate); return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime(); } // filter内修改为 return getPureDateStamp(item[0]) === getPureDateStamp(prodDate) && item[1] === machine;
内容的提问来源于stack exchange,提问作者Rock
相关产品推荐
相关产品推荐

