typescript - Linq TypeScript 三元运算符 - 是否可以在不重复代码的情况下重新使用条件作为第一个表达式?
问题描述
我的问题很简单,我搜索了 StackOverflow、StackExchange + 其他一些试图找到答案的网站,但结果有点短。
这是关于 Linq 三元表达式,即
Condition ? Expression1 : Expression2;
本质上,我可以重新使用Condition
Linq 三元表达式作为第一个返回的Expression
吗?这可能吗?
我想要这样做的原因是我有一个很长的 Linq 三元表达式,它跨越 3 行代码并延伸超过 183 个字符。它这么长的主要原因是因为一些字符串和变量名。
我的代码的精简版如下:
var x = array.find(x => x.key == "EXAMPLE_KEY_NAME") ? array.find(x => x.key == "EXAMPLE_KEY_NAME") : null;
或者
var x = array.find(x => x.key == "EXAMPLE_KEY_NAME") ? array.find(x => x.key == "EXAMPLE_KEY_NAME").value : null;
我考虑过的几个解决方案是:
- 将该部分存储
array.find(x => x.key == "EXAMPLE_KEY_NAME")
在变量中以供以后参考 - 使用
If
声明
我决定反对这两种方法,因为它们在页面上的物理代码量方面增加了额外的开销。
我想归根结底是,这样的事情存在吗?(初始条件在哪里this
)
var x = array.find(x => x.key == "EXAMPLE_KEY_NAME") ? this : null;
它也可以用于我在对象中存储的特定值之后的上下文中:
var x = array.find(x => x.key == "EXAMPLE_KEY_NAME") ? this.value : null;
这是我第一次提出问题,尽管我已经回答了很多问题,所以请随时提供建设性的反馈或指出我要阅读的文档方向!
解决方案
您可以为此使用可选链接和||
运算符:
var x = array.find(x => x.key == "EXAMPLE_KEY_NAME")?.value || null;
推荐阅读
- c# - 为什么用户界面仍然冻结?
- android - exoplayer android中的时间栏问题
- linux - 如何使用 jq bash 更改 json 对象
- vector - 求解 DDE 系统
- next.js - ReferenceError:导航器未在“npm run build”Nextjs @andyet/simplewebrtc 上定义
- heroku - 当我运行打开我的heroku应用程序时,我收到了这个消息?请帮我
- r - 是否有任何包可用于在 R 中缩放到单位长度?
- javascript - 存根 AWS SQS 客户端
- c++ - mql4 中的结构或类类型预期错误
- android - 如何在请求正文中使用刷新令牌重试 rxjava 请求?