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

이 같은 표현을 증류하는 깨끗한 방법이 있나요? []. 모든 것을 사용하는 이중 부정은 위장하기가 어렵습니다. 당신은 충분히 멀리 가지 않았다

+0

이유가'은'every' 콜백 내에서 호출 indexOf' 포함하지? – 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

배열에'expressions'라는 이름을 붙이기가 다소 잘못된 것일 수도 있습니다. 아마도'debugArgs' 또는 유사할까요? – Li357

+0

모든 배열 도우미 메서드가 있습니까? 그것이 존재했다는 것을 모르고 있었다 –

+1

그들은 모두 ES5에 추가되었습니다. ['every'] (https://es5.github.io/#x15.4.4.16) ['some'] (https://es5.github.io/#x15.4.4.17) –