如何在JavaScript中实现两个数组间字符串的近似匹配
如何用JavaScript实现数组元素的近似字符串匹配
嘿,我来帮你搞定这个近似匹配的需求!你已经实现了精确匹配,现在只需要调整匹配逻辑,就能让它识别出包含关键词的元素,完美满足你的示例需求。
核心思路:子串匹配实现近似匹配
你的需求是让arr中的元素只要包含keyword里的任意一个完整关键词就算匹配(比如"Facebook Page Discovery (En) - 1426357"包含"Facebook Page Discovery (En)"就算匹配)。这种场景下,用String.includes()结合Array.some()就能轻松实现。
修改后的代码示例
基础版(完全匹配子串)
var arr = ['English Question Answering', 'Questions And Reviews Organic Milk', 'Facebook Page Discovery (En) - 1426357']; var keyword = ['English Question Answering', 'Facebook Page Discovery (En)']; var ret = []; arr.forEach(val => { // 检查当前元素是否包含任意一个关键词 const isMatch = keyword.some(key => val.includes(key)); if (isMatch) { ret.push(val); } }); console.log(ret); // 输出: ['English Question Answering', 'Facebook Page Discovery (En) - 1426357']
大小写不敏感版(可选)
如果需要忽略大小写差异(比如"english question answering"也能匹配),可以在匹配前统一转成小写:
var arr = ['English Question Answering', 'Questions And Reviews Organic Milk', 'Facebook Page Discovery (En) - 1426357']; var keyword = ['english question answering', 'Facebook Page Discovery (En)']; var ret = []; arr.forEach(val => { const lowerVal = val.toLowerCase(); const isMatch = keyword.some(key => lowerVal.includes(key.toLowerCase())); if (isMatch) { ret.push(val); } }); console.log(ret); // 同样会输出期望结果
适配你原代码的二维数组场景
如果你的arr其实是二维数组(对应你原代码里的val[0]、val[1]等字段),只需要调整匹配的字段即可:
// 假设arr是二维数组 var arr = [ ['task_001', 'English Question Answering', '', '$15', '', '10'], ['task_002', 'Questions And Reviews Organic Milk', '', '$20', '', '15'], ['task_003', 'Facebook Page Discovery (En) - 1426357', '', '$18', '', '8'] ]; var keyword = ['English Question Answering', 'Facebook Page Discovery (En)']; var ret = []; arr.forEach(val => { // 针对val[1]字段做近似匹配 const isMatch = keyword.some(key => val[1].includes(key)); if (isMatch) { ret.push(`*${val[0]}* - ***${val[1]}*** - Pay: *${val[3]}* - tasks: *${val[5]}*`); } }); console.log(ret); // 输出格式化后的匹配结果
额外说明
如果以后需要更复杂的模糊匹配(比如允许少量拼写错误),可以考虑实现**Levenshtein距离(编辑距离)**算法来计算字符串相似度,但就你当前的需求来说,子串匹配已经完全够用,而且简单高效。
内容的提问来源于stack exchange,提问作者Victor Escalona
相关产品推荐
相关产品推荐

