我陷入了与三元运营商的不理解之中。所以,我在 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
});
答案 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所抱怨的。