2016-11-22 99 views
0

我有这个布尔表达式,我要清理如果可能的话:蒸馏布尔表示到一个表达

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

有没有提炼出这样的表达式下来更清洁的方式?这种双重否定使用[] .every很难忍受。

+0

为什么不包括'indexOf'的'every'回调里面打电话? – loganfsmyth

+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) 
+2

命名数组''表达式',也许''debugArgs'或类似的名称可能有点不恰当? – Li357

+0

是否有像每个数组一样的辅助方法?不知道它存在 –

+1

他们都加在一起到ES5。 ['every'](https://es5.github.io/#x15.4.4.16)['some'](https://es5.github.io/#x15.4.4.17) –