2016-10-07 5 views
0

if 새로운 변수를 도입하지 않고 표현식을 속일 수있는 방법이 있습니까?어떻게하면이 엄격한 동등한 표현을 단축 할 수 있습니까?

if ((c2 === 'RED') || (c2 === 'GREEN') || (c2 === 'BLUE')) { 
return true; 
} else { 
return false 
} 

나는이 같은 될 것이라고 생각 : 당신이

if (['RED','GREEN','BLUE'].indexOf(c2) !== -1) {... 

을 할 수 있도록 if ((c2 === ('RED'|| 'GREEN' ||'BLUE')))

+0

아니요, 원본은 비교 연산자로 할 수있는 최선의 방법입니다. 또 다른 방법은 값을 객체의 속성 이름으로 설정하고'c2'를 속성 이름으로 테스트하는 것입니다. – Pointy

답변

2

Array.indexOf은 엄격한 검사를 수행하고 이미 부울을 반환, 당신은 단지 그것을 반환 할 수 조건없이 직접

+2

Golf'd :'[ 'RED', 'GREEN', 'BLUE'].는 (c2)' –

+0

골프를 더 입는다'새로운 세트 ([ 'RED', 'GREEN', 'BLUE')' – adeneo

1

당신이 비교할 수 있다는 사실을 이용하여 줄일 수 있습니다 isons 당신에게 부울 결과를 제공합니다, 그래서 당신은 부울 값을 명시 적 return 필요하지 않습니다 :

var targets = { RED: 1, GREEN: 1, BLUE: 1 }; 
return !!targets[c2]; // !! turns the 1 into true 

(사용자가 객체에 true을 사용할 수 또한 개체를 만들 수 있습니다

return ((c2 === 'RED') || (c2 === 'GREEN') || (c2 === 'BLUE')); 

!!을 피하십시오.)

+2

변수는 필요하지 않습니다 :'return !! {RED : 1, GREEN : 1, BLUE : 1} [c2]; '그러나 그것은 읽기가 꽤 어려워지고 있습니다. – 4castle

+3

또는'c2 in {RED : 1, GREEN : 1, BLUE : 1} ' – adeneo

+0

배열을 사용하는 IMO가 여기에보다 쉽게 ​​보입니다. 왜냐하면'includes' 또는'indexOf'가 boolean을 반환하기 때문에 (indexOf에 ish, truthy/falsy) double NOT 연산. 당신이 잘못하지 않았다는 것을 의미하지는 않습니다, 단지 다른 방법, 모든 일 –

관련 문제