JavaScript无需for循环判断user.getRoles返回数组是否含Admin角色问题
报错原因
user.getRoles()返回的是UserRole对象组成的数组,数组本身没有getName()方法,只有数组内的每个UserRole实例才具备该方法,你之前的写法直接调用数组的getName()自然会抛出错误。
无手动for循环实现方案
可以直接使用JS数组内置方法完成判断,不需要手动编写循环逻辑:
ES6+ 环境(推荐,性能最优)
使用Array.some()方法,只要数组内有一个元素符合条件就立即返回true,匹配到结果后会停止遍历,性能和手动写for循环一致:
const isAdmin = user.getRoles().some(role => role.getName() === 'Admin'); // 直接在判断中使用即可 if (isAdmin) { // 你的业务逻辑 }
ES5 兼容环境
先通过Array.map()提取所有角色名称为字符串数组,再判断是否包含目标值:
var roleNameList = user.getRoles().map(function(role) { return role.getName(); }); var isAdmin = roleNameList.indexOf('Admin') > -1; if (isAdmin) { // 你的业务逻辑 }
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

