code kata) array안에서 공통 시작글자(prefix)를 찾아내기 [.reduce()에 대해]

개발자 우니·2020년 7월 12일
0

["wha", "what", "whatever", "wh"] 라면 공통시작글자'wh'를 출력
["fly","flower","flow"] 라면 'fl'를 출력하게 해보자

1. 가장 짧은 배열가진 element 찾아내기

: array 내에 element를 순회하며 하나의 결과값을 출력하는 method인 reduce를 사용하였다.

reduce는 2개의 (parameter=매개변수) : callback함수와 initvalue를 가진다
그리고 callback함수는 4개의 (argument=인자)를 가지는데 accumulator(계속 더해지는 값), currentvalue(현재 호출되는 element), index, array 가 있다.
initvalu가 주어지지 않으면 array의 index [0]이 아닌 [1]의 element를 사용한다.

array.reduce((pre,value)=> )
pre는 이전 콜백의 리턴값이 된다. 이 경우에는 Initvalue가 없으므로 첫 호출에선 pre가 index[0]의 값이 되고, 두번째 호출부터는 이전 콜백의 리턴값이 pre가 된다.

let strs = ["wha", "what", "whatever", "wh"] 일 때와
	   ["fly","flower","flow"] 일 때,
strs.reduce((pre, val) => (pre.length <= val.length ? pre : val));

pre는 "wha"를 가진채로 첫번째 호출이 실행된다.(len=3)
what(len=4)보다 작으므로 "wha"가 그대로 리턴. 
pre는 이전 콜백의 리턴값이니까 그대로 "wha"가 pre값이 된다.
이렇게 호출이 되다가 제일 작은 "wh"를 만나면 (len=2) "wh"가 최종적으로 리턴된다.

두번째로 array도 마찬가지로 
"fly"를 기준으로 비교하다가 결국 제일 짧은 "fly"가 리턴된다.

2. 가장 짧은 글자를 기준으로 포함관계 찾아내기

포함되지 않은다면 짧게 잘라내기

array인 strs를 돌면서 위에서 찾아낸 가장 짧은 element인 shortest를 포함하는지 확인한다.
만약 포함이 되면 index는 0이 나올것이고 포함관계가 되지 않으면 -1이 나온다.
그럴 경우에는 if문에 따라서 shortest가 잘린다.(substring 사용)
예를 살펴보자.

위에서 shortest 값으로 최종적으로 리턴된 "fly"로 살펴보자.
"flower".indexOf("fly") = -1 ;
"flow".indexOf("fly") = -1 ;
둘다 0이 아니므로 if문에 해당된다.
그런 경우 substring을 이용해서 변수 shortest가 잘려서"fl"이 되었다.
이미 두번째 호출("flower") 를 통해서 shortest = "fl" 이 되었으니
세번째 호출인 ("flow")는 더 이상 if 문에 해당되지 않고 
최종적으로 "fl"이 리턴되었다.

str.substring(0, n) 과 str.slice(0, n) 에서 n 번째 이전에 잘린다는 것 중요!!! 즉, 0~(n-1)까지만 출력된다는 것 주의!!

< 최종 정리된 코드 >

profile
It’s now or never

0개의 댓글