提取布尔值表示一个表达式

时间:2016-11-22 04:56:52

标签: javascript node.js ecmascript-6

我有这个布尔表达式,如果可能的话我想清理它:

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);

有没有更简洁的方式来提炼这样的表达式?使用[]。每次的双重否定很难忍受。

1 个答案:

答案 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)