// meet [Boolean] 是否需要全部满足 // caps[Array] 需要满足的条件 // userCaps [Object] 当前用户拥有的权限 if (meet === false) { return caps.find((cap) => { if (userCaps[cap] === true) return true }) != null ? true : false } else { return caps.find((cap) => { if (userCaps[cap] !== true) return true }) != null ? false : true }
这是一段前端判断用户是否有权限的句子,如果条件是 meet 则需要全部满足,否则只要满足其一。
其实我是想吧这两个 return 合并为一个,因为只有中间 true 判断和结尾的 false : true 相反,但是可读性巨差无比
就像下面这样
return caps.find((cap) => { if (meet ? userCaps[cap] !== true : userCaps[cap] === true) return true }) != null ? !meet : meet
在大厂这样写 js 会被辞退吗
![]() | 1 UnluckyNinja 2018-03-15 14:38:21 +08:00 ![]() some() every()了解一下 |
2 hoythan OP @UnluckyNinja 浏览器兼容有点高额,我虽然用了 ES6 但是最终还是要转 5 的 |
3 hoythan OP @UnluckyNinja 我看错了兼容性 |
5 hoythan div class="badge op">OP 2018-03-15 14:48:26 +08:00 ``` return meet ? caps.some(() => { }) : caps.every(() => { }) ``` |
6 hoythan OP ``` return meet ? caps.every(() => { }) : caps.some(() => { }) ``` |
![]() | 7 UnluckyNinja 2018-03-15 14:49:41 +08:00 ![]() @hoythan #3 注意下 every 对空数组固定输出 true (这两个函数一个假定 false 一个假定 true,遇到不同值直接跳出遍历立即返回),应该就没什么坑了 |
8 hoythan OP |