我有这个布尔表达式,如果可能的话我想清理它:
const isDebug =
(execArgs.indexOf('--debug') > -1) ||
(execArgs.indexOf('debug') > -1) ||
(execArgs.indexOf('--inspect') > -1) ||
(execArgs.indexOf('--debug=5858') > -1) ||
(execArgs.indexOf('--debug-brk=5858') > -1);
必须使用额外的括号和||有点笨拙。
我可以这样做(我认为):
const expressions = [
execArgs.indexOf('--debug') > -1,
execArgs.indexOf('debug') > -1,
execArgs.indexOf('--inspect') > -1,
execArgs.indexOf('--debug=5858') > -1,
execArgs.indexOf('--debug-brk=5858') > -1
];
const isDebug = !expressions.every(x => !x);
有没有更简洁的方式来提炼这样的表达式?使用[]。每次的双重否定很难忍受。
答案 0 :(得分:4)
你没有走得太远:
const expressions = [
'--debug',
'debug',
'--inspect',
'--debug=5858',
'--debug-brk=5858'
];
const isDebug = expressions.some(x => execArgs.indexOf(x) > -1);
因为!_.every(x => !_)
是_.some(x => _)
。逻辑上至少。
另一种选择使用正则表达式。您可以从数组中构建它:
const isDebug = new RegExp(expressions.join('|')).test(execArgs);
或者来自RegExp
文字:
const isDebug = /--debug|debug|--inspect|--debug=5858|--debug-brk=5858/.test(execArgs)