【问题标题】:Convert conditional (else/if) operators to logical operators (&& ||) with a JS linter/formatter?使用 JS linter/formatter 将条件(else/if)运算符转换为逻辑运算符(&& ||)?
【发布时间】:2019-08-14 12:56:51
【问题描述】:

我有一些旧的 React 代码使用了很多条件,例如使用 LET 设置变量,然后使用 if/else 来应用值。

为了可读性,我想将其更改为在有意义的地方使用逻辑运算符。

是否有可以自动执行此操作的 linter / formatter?

包含示例代码。

到目前为止,使用 ESlint 或 prettier 无法做到这一点。

let method
if (play && play.show_question) method = 'question'
else if (play && play.show_answer) method = 'answer'

使用 linter,自动转换为

const method = play && play.show_question ? 'question' : play && play.show_answer && 'answer'

如果存在可以自动重构的格式化程序/插件/linter,请告诉我

【问题讨论】:

  • 为了使其更具可读性,您应该明确使用… ? 'answer' : undefined
  • 谢谢,但也很抱歉浪费您的时间,因为我没有要求优化代码。再次查看时,很明显我更正的代码并不正确,我只是从当前代码中的许多示例中提取了一个示例,我想用 linter 自动调整。以同样的方式,我用一个好的规则集打 eslint --fix 来清理一些垃圾,想知道这是否也可能 - 编辑 - 不想听起来不屑一顾,你的观点是非常公平的,可以肯定的是,至少是后代。

标签: javascript reactjs ecmascript-6 eslint prettier


【解决方案1】:

您可以先检查play,然后选择问题部分或答案部分。

const method = play && (play.show_question && 'question' || play.show_answer && 'answer');

为了获得一个定义的假值,你可以添加一个默认值,比如undefined

const
    method = play && (play.show_question && 'question' || play.show_answer && 'answer')
        || undefined;

【讨论】:

  • OP 不是要求重构建议,而是如何自动执行此特定重构。
  • 是的,我说的是自动重构的原理,而不考虑最佳输出。尼娜在她看来是对的,所以谢谢。很抱歉这个匆忙的例子,但问题仍然存在。我想目前这是不可能的(帖子有点远),我想规则有太多的例外来可靠地编码。只是 Prettier /eslint 可以做很多事情,例如解构,只是想知道这是否是任何插件中的当前功能。也许有一天有人会做一个 eslint 插件,因为对我来说这种类型的代码太冗长了
猜你喜欢
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多