2016-11-22 22 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) –