JavaScript检测字符串数组含Day/Hour等关键词不生效问题排查
问题修复方案
故障根因
Array.includes() 方法执行的是完全全等匹配,你采集到的数组元素是"1 Hour"、"2 Days"这类带数值、空格的完整字符串,和你传入的目标关键词"Hour"、"Days"并不完全相等,因此匹配逻辑永远无法触发,始终进入else分支。
修复方案
你可以通过Array.some() + 字符串包含判断的逻辑实现需求,同时可以简化重复的if判断逻辑,优化后代码如下:
// 提前定义要匹配的关键词列表 const matchKeywords = ['Hour', 'Hours', 'Day', 'Days'] let isActive = true // 直接遍历.time元素,无需先转存全部文本到数组,匹配到就提前终止遍历 const hasLongTime = Array.from(document.querySelectorAll('.time')).some(el => { const text = el.textContent.trim() // 判断当前文本是否包含任意一个目标关键词 return matchKeywords.some(keyword => text.includes(keyword)) }) await sleep(150) if (hasLongTime) { isActive = false console.log('Above one hour') } else { console.log('under 1 hour') }
兼容原有采集逻辑的修改方案
如果你的场景需要保留先采集全部时间文本的逻辑,也可以对已有的数组做如下修改:
const matchKeywords = ['Hour', 'Hours', 'Day', 'Days'] // 原有采集逻辑保持不变 let cardAuctionRemainingTimeString = document.querySelectorAll('.time'); let arrayCardAuctionTimeRemaining = []; for (let times = 0; times < cardAuctionRemainingTimeString.length; times++) { let time = cardAuctionRemainingTimeString[times].textContent; arrayCardAuctionTimeRemaining.push(time); } await sleep(150); // 仅修改判断逻辑即可 const hasLongTime = arrayCardAuctionTimeRemaining.some(timeText => { return matchKeywords.some(keyword => timeText.includes(keyword)) }) if (hasLongTime) { isActive = false; console.log('Above one hour'); } else { console.log('under 1 hour'); }
内容的提问来源于stack exchange,提问作者exec85
相关产品推荐
相关产品推荐

