如何在代码中避免嵌套的三元表达式?

Mou*_*ror 5 javascript functional-programming purely-functional

我有这样的代码.如何使用JavaScript中的函数式编程以更干净,更优雅的方式编写它?我想摆脱嵌套的三元表达式.有任何想法吗?

props => ({
            iconColor: props.isPriority ? (props.isCompleted ? variables.color.lightpurple : variables.color.purple ) : variables.color.gray3,
            iconName: props.isPriority ? 'star-full' : 'star-empty',
          }))
Run Code Online (Sandbox Code Playgroud)

这是该代码的其余部分:

编辑:

const enhance: React$HOC<*, InitialProps> = compose(
      withProps(props => ({
        iconColor: props.isPriority ? (props.isCompleted ? variables.color.lightpurple : variables.color.purple) : variables.color.gray3,
        iconName: props.isPriority ? 'star-full' : 'star-empty',
      }))
    )
Run Code Online (Sandbox Code Playgroud)

Aad*_*hah 10

是的,但是我的生日不满意: 44:16 error Do not nest ternary expressions [no-nested-ternary]

如果这是你唯一的问题,那么解决方案很简单.创建自己的条件函数:

const iff = (condition, then, otherwise) => condition ? then : otherwise;

props => ({
  iconColor: props.isPriority ?
    iff(props.isCompleted, variables.color.lightpurple, variables.color.purple) :
    variables.color.gray3,
  iconName: props.isPriority ? 'star-full' : 'star-empty',
})
Run Code Online (Sandbox Code Playgroud)

现在你的短信不应该抱怨.话虽这么说,你应该[no-nested-ternary]在你的linter中禁用.你的linter认为嵌套条件是坏的,这有点愚蠢.

  • 这并不是“有点愚蠢”,linter 并不是抱怨嵌套条件,而是抱怨因为嵌套三元运算符通常不利于代码清晰度。 (5认同)
  • 这只是欺骗 ESLint 并添加间接性。我同意如果没有合适的替代方案,则应禁用此规则。您能否编辑答案以包含更改 eslint 配置的更重要的解决方案,而不是添加对代码库没有任何好处并且只会使其更难以阅读的功能? (2认同)