배열 이해 (Firefox 30-57)
참고 : 배열 이해는 표준화되지 않았으며 Firefox 58에서는 더 이상 사용되지 않습니다.
원래 ECMAScript 7 사양에는 여러 가지 새로운 배열 기반 기능이 포함되었습니다. 이들의 대부분이 확정 버전으로하지 않았지만, 파이어 폭스 지원 (ED)이 기능의 가능성이 가장 큰 : 대체 할 수있는 멋진 새 구문 .filter
과 .map
와 for(a of b)
구문. 예를 들면 다음과 같습니다.
b.filter(a=>/\s/.test(a)).map(a=>a.length)
[for(a of b)if(/\s/.test(a))a.length]
보시다시피, 두 줄은 부피가 큰 키워드와 화살표 기능을 포함하지 않는 두 번째 줄 외에 다른 것이 아닙니다. 그러나 이것은 주문만을 설명한다 .filter().map()
. .map().filter()
대신에 어떻게됩니까 ? 실제로 상황에 따라 다릅니다.
b.map(a=>a[0]).filter(a=>a<'['&&a>'@')
[for(a of b)if(a<'['&&a>'@')a[0]]
b.map(a=>c.indexOf(a)).filter(a=>a>-1)
[for(a of b)if((d=c.indexOf(a))>-1)d]
b.map(a=>a.toString(2)).filter(a=>/01/.test(a))
[for(a of b)if(/01/.test(c=a.toString(2)))c]
또는 당신이 무엇을 원하는 경우 중 하나 .map
또는 .filter
? 글쎄, 그것은 일반적으로 덜 OK로 나타납니다.
b.map(a=>a.toString(2))
[for(a of b)a.toString(2)]
b.filter(a=>a%3&&a%5)
[for(a of b)if(a%3&&a%5)a]
따라서 제 충고는 일반적으로 .map
and를 사용하는 곳마다 배열 이해를 사용하는 .filter
것이지만 둘 중 하나만 사용하는 것이 아닙니다.
문자열 이해
ES7 이해에 대한 좋은 점은 .map
and와 같은 배열 별 함수와 달리 배열 뿐만 아니라 반복 가능한 객체 에서도.filter
사용할 수 있다는 것 입니다. 문자열을 다룰 때 특히 유용합니다. 예를 들어 문자열을 통해 각 문자를 실행하려면 다음을 수행하십시오 .c
c.charCodeAt()
x=>[...x].map(c=>c.charCodeAt())
x=>[for(c of x)c.charCodeAt()]
그것은 상당히 작은 규모로 절약 된 2 바이트입니다. 문자열에서 특정 문자를 필터링하려면 어떻게해야합니까? 예를 들어, 이것은 대문자 만 유지합니다 :
x=>[...x].filter(c=>c<'['&&c>'@')
x=>[for(c of x)if(c<'['&&c>'@')c]
흠, 그것은 더 짧지 않습니다. 그러나 우리가 두 가지를 결합하면 :
x=>[...x].filter(c=>c<'['&&c>'@').map(c=>c.charCodeAt())
x=>[for(c of x)if(c<'['&&c>'@')c.charCodeAt()]
와우, 전체 10 바이트가 절약되었습니다!
문자열 이해의 또 다른 장점은 하드 코딩 된 문자열이 추가 바이트를 절약한다는 것입니다 of
.
x=>[...'[](){}<>'].map(c=>x.split(c).length-1)
x=>[for(c of'[](){}<>')x.split(c).length-1]
x=>[...'[](){}<>'].filter(c=>x.split(c).length>3)
x=>[for(c of'[](){}<>')if(x.split(c).length>3)c]
인덱싱
배열 이해는 문자열 / 배열에서 현재 색인을 얻는 것이 조금 더 어려워 지지만 수행 할 수 있습니다.
a.map((x,i)=>x+i).filter ((x,i)=>~i%2)
[for(x of(i=0,a))if(++i%2)x+i-1]
주의해야 할 것은 조건이 충족 될 때뿐만 아니라 매번 인덱스가 증가 하도록하는 것입니다.
발전기 이해
생성기 이해는 기본적으로 배열 이해와 동일한 구문을 갖습니다. 괄호를 괄호로 바꾸십시오.
x=>(for(c of x)if(c<'['&&c>'@')c.charCodeAt())
이것은 배열과 거의 같은 방식으로 작동 하는 생성기 를 생성 하지만 다른 대답에 대한 이야기입니다.
요약
기본적으로 이해력은 일반적으로보다 짧지 만 .map().filter()
상황의 세부 사항에 따라 결정됩니다. 두 가지 방법으로 시도하고 어느 것이 더 잘 작동하는지 확인하는 것이 가장 좋습니다.
추신 : 다른 이해 관련 팁이나이 답변을 향상시킬 수있는 방법을 제안하십시오!