如何过滤嵌套数组内指定位置的内容?Google Sheets数组日期过滤
修正嵌套数组过滤逻辑的解决方案
首先,你的原始代码存在几个关键问题,导致无法得到预期结果:
- 员工ID匹配逻辑有误:原始数组里
item[1]是员工编号(比如134、131),但你设置的funcionarioId = "user1"没有对应匹配项;另外预期输出包含两个不同员工编号的条目,推测你可能是想忽略员工ID匹配,或是把funcionarioId的值写错了(比如应该是多个ID或某个特定编号)。 - 日期匹配逻辑错误:
item[3]是带空格的日期字符串(如13/ 11 / 2019),不能直接和month/year做全等比较,得先清洗格式再提取月、年信息。
修正后的代码
假设你需要保留月份(11)、年份(2019)的核心筛选逻辑,同时可以根据需求调整员工ID的匹配规则:
// 补全原始数据的字符串格式(添加引号) var data = [ [1, 134, "DIOGO", "03/ 12 / 2019", "ggggg", 2], [2, 131, "ALEISIO", "13/ 11 / 2019", "ggg", 33], [3, 134, "DIOGO", "25/ 11 / 2019", "gggg", 2], [4, 134, "DIOGO", "15/ 12 / 2019", "tttttt", 2] ]; var funcionarioId = "user1"; // 如果不需要匹配员工ID,可注释此行及对应判断 var targetMonth = "11"; var targetYear = "2019"; var dataFiltered = data.filter(function(item) { // 1. 清洗日期字符串:移除所有空格 const cleanDate = item[3].replace(/\s/g, ""); // 2. 拆分日期为日、月、年三个部分 const [day, month, year] = cleanDate.split("/"); // 3. 组合判断条件:日期匹配+可选员工ID匹配 // 若不需要员工ID匹配,删除`item[1].toString() === funcionarioId &&`即可 return month === targetMonth && year === targetYear; }); console.log(dataFiltered);
代码关键步骤解释
- 日期格式清洗:用
replace(/\s/g, "")去掉日期里的所有空格,把13/ 11 / 2019转换成标准的13/11/2019格式。 - 日期拆分提取:通过
split("/")把清洗后的日期拆分成日、月、年,方便单独匹配目标月份和年份。 - 条件灵活组合:保留核心的年月匹配逻辑,员工ID匹配可根据实际需求开启或关闭,同时注意类型统一(比如把数字类型的员工编号转成字符串再对比)。
最终预期输出
运行修正后的代码,会得到你想要的结果:
[[2, 131, "ALEISIO", "13/ 11 / 2019", "ggg", 33], [3, 134, "DIOGO", "25/ 11 / 2019", "gggg", 2]]
内容的提问来源于stack exchange,提问作者user2916405
相关产品推荐
相关产品推荐

