如何在if条件判断语句中仅匹配识别字符串的部分内容
解决方案
你可以通过以下几种方式实现字符串前缀匹配,替换原有全等判断即可:
方法1:使用ES6+内置的startsWith方法(最推荐)
这个方法是专门用来判断字符串是否以指定内容开头的,语法最简单直观:
修改后的循环代码如下:
var armadilloRoles = [ { name: 'Billing', description: 'armadillo.organization.billing' }, { name: 'Doctor', description: 'armadillo.organization.doctor' }, { name: 'Nurse Practitioner', description: 'armadillo.organization.nursePractitioner' }, { name: 'Patient', description: 'armadillo.organization.patient' }, { name: 'Aluna admin', description: 'armadillo.microurb.admin' }, { name: 'Aluna billing', description: 'armadillo.microurb.billing' }, { name: 'Respiratory therapist', description: 'armadillo.microurb.respiratoryTherapist' }, { name: 'Aluna commercial contact', description: 'armadillo.microurb.practiceGrowthDirector' } ]; var viewRoles = []; for (var i = 0; i < armadilloRoles.length; i++) { // 替换原来的全等判断为startsWith if (armadilloRoles[i].description.startsWith('armadillo.organization.')) { viewRoles.push(armadilloRoles[i]); } } viewRoles;
更简洁的写法可以直接用数组的filter方法完成筛选,不需要手动写循环:
const viewRoles = armadilloRoles.filter(item => item.description.startsWith('armadillo.organization.') )
方法2:兼容旧浏览器的indexOf方法
如果需要兼容不支持ES6的旧环境,可以用indexOf判断指定字符串的出现位置是否为0(即出现在最开头):
if (armadilloRoles[i].description.indexOf('armadillo.organization.') === 0) { viewRoles.push(armadilloRoles[i]); }
方法3:正则匹配
也可以用正则的开头匹配符^实现前缀校验,注意正则里的.需要加反斜杠转义:
if (/^armadillo\.organization\./.test(armadilloRoles[i].description)) { viewRoles.push(armadilloRoles[i]); }
原代码问题说明
你之前用===全等判断要求description字段的完整内容和前缀完全一致,但实际符合要求的字段尾部还有billing/doctor等后缀,所以永远无法匹配到结果。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

