如何基于包含关键词.com过滤JavaScript对象数组?
筛选包含指定子串的数组对象
你当前的过滤逻辑用了严格相等运算符===,只能匹配和.com完全一致的字符串,自然筛不出带域名的对象。只需修改过滤条件,用字符串的includes()方法就能实现“包含匹配”的需求:
修改后的核心过滤代码
var filter = "company"; var keyword = ".com"; // 用includes()判断字符串是否包含指定子串,可选链?.避免属性值为null/undefined时报错 var filteredArray = data.filter((item) => item[filter]?.includes(keyword)); console.log(filteredArray);
完整修改后的代码片段
const data = await page.evaluate(() => { const list = []; const items = document.querySelectorAll("body > div.js-application-root.full-size > div > main > div > div > div > div > div.content-wrapper.spec-program-contents > div > div.program__profile > ul > li") for (const name of items) { list.push({ company: name.innerHTML, }) } return list }) var filter = "company"; var keyword = ".com"; // 替换原有的严格相等判断为包含匹配 var filteredArray = data.filter((item) => item[filter]?.includes(keyword)); console.log(filteredArray); // jobs.deleteMany({}) // jobs.insertMany(data) console.log(filteredArray) await browser.close()
补充说明
includes()方法会检查目标字符串中是否存在指定子串,返回布尔值,刚好适配“包含匹配”的需求- 可选链操作符
?.是为了避免部分item[filter]为null或undefined时触发报错,让代码更健壮
内容的提问来源于stack exchange,提问作者lukesudom
相关产品推荐
相关产品推荐

