JavaScript如何过滤响应中支持类型的数据并拦截非法值提交
问题解决方案
核心问题原因
- 原遍历使用的
forEach方法不支持中断循环,回调内的return/break无法终止整体遍历,非法值出现后后续逻辑仍会执行 - 判断逻辑错误:
res.hasOwnProperty(valMapper[data])仅判断属性是否存在,但你的res本身就包含edit属性,只是值为false,所以传入C时条件仍会成立,不会进入异常分支
修复代码
let res = { 'create': true, 'edit': false, 'delete': true, }; const valMapper = { 'A': 'create', 'C': 'edit', 'D': 'delete', }; const values = ['A', 'C', 'D']; // 用支持中断的for...of循环替代forEach for (const data of values) { const type = valMapper[data]; // 优先判断是否有对应映射、且res中对应类型权限为true if (type && res[type] === true) { console.log(data); // 这里写你的正常提交逻辑 } else { console.log('输入的数据无效,终止提交'); // 中断循环 break; } }
逻辑说明
- 替换
forEach为for...of循环,遇到非法值时可直接通过break终止整个遍历,阻止后续数据提交 - 修正判断条件:除了匹配映射关系外,额外校验
res中对应类型的取值为true,只有允许的create/delete对应才会通过校验,edit和其他不存在的类型都会进入异常分支
内容的提问来源于stack exchange,提问作者Bravo
相关产品推荐
相关产品推荐

