三元运算符在JS中不能按需运行

时间:2018-04-05 12:06:49

标签: javascript ecmascript-6 ternary-operator eslint

我陷入了与三元运营商的不理解之中。所以,我在 VS Code 中使用 ESLint插件,这个插件在控制台中礼貌地告诉我,下面的第一类代码不是很好写给我警告错误:Unexpected mix of '&&' and '||'

所以,这是我的代码:

: tempFilter === 'all' ? iteam.text.match(value) && iteam.status === 'active' || iteam.status === 'done'

ESLint 建议我通过在||括号()中包围绑定条件来重写它:

: tempFilter === 'all' ? iteam.text.match(value) && (iteam.status === 'active' || iteam.status === 'done')

但在那之后,我的条件在数组过滤器函数中不能正常工作。我的问题是 - 我错过了什么?为什么在 ESLint 改进后代码被破坏,或者在这种情况下我们不需要实现任何支撑?

过滤代码以了解我在哪里使用上面代码的部分:

    let filteredButtonsDown = state.iteams.buttons.filter(button => {
        return tempFilter === 'done' && value === '' ? button.status === 'done' 
            : tempFilter === 'active' && value === '' ? button.status === 'active'
            : tempFilter === 'all' && value === '' ? button.status === 'active' || button.status === 'done'
            : tempFilter === 'done' ? button.text.match(value) && button.status === 'done'
            : tempFilter === 'active' ? button.text.match(value) && button.status === 'active'
            : tempFilter === 'all' ? button.text.match(value) && button.status === 'active' || button.status === 'done'
            : button
    });

1 个答案:

答案 0 :(得分:0)

考虑这一行中的逻辑:

    : tempFilter === 'all' && value === '' ? button.status === 'active' || button.status === 'done'

在翻译中你说:

如果tempFilter等于“all”且值等于“”,则button.status等于“active”或button.status等于“done”。这没有任何意义,因为你对button.status的价值是多么模糊,并没有明确地设置它的价值。

在上面引用的代码中问自己:如果打开条件的计算结果为true,button.status的值是多少。这就是问题所在。您将值指定为“活动”或“已完成”,这是没有意义的。您只能分配一个值。无论是'主动'还是'完成'都不是两者,这就是ESLint所抱怨的。