这一段 JS 语句怎么写才能让它更通顺和简单

2018-03-15 14:28:59 +08:00
 hoythan
    // 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 会被辞退吗

2236 次点击
所在节点    JavaScript
8 条回复
UnluckyNinja
2018-03-15 14:38:21 +08:00
some() every()了解一下
hoythan
2018-03-15 14:41:55 +08:00
@UnluckyNinja 浏览器兼容有点高额,我虽然用了 ES6 但是最终还是要转 5 的
hoythan
2018-03-15 14:43:02 +08:00
@UnluckyNinja 我看错了兼容性
narcotics
2018-03-15 14:44:10 +08:00
@hoythan lodash 之类的库也不在考虑范围内吗?
hoythan
2018-03-15 14:48:26 +08:00
```
return meet ? caps.some(() => {

}) : caps.every(() => {

})
```
hoythan
2018-03-15 14:49:02 +08:00
```
return meet ? caps.every(() => {

}) : caps.some(() => {

})
```
UnluckyNinja
2018-03-15 14:49:41 +08:00
@hoythan #3 注意下 every 对空数组固定输出 true (这两个函数一个假定 false 一个假定 true,遇到不同值直接跳出遍历立即返回),应该就没什么坑了
hoythan
2018-03-15 14:54:38 +08:00
@UnluckyNinja 💖💕💖💕💖💕💖💕💖💕💖💕💖💕💖💕💖💕💖💕💖💕💖💕

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/438321

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX