배열속에 배열들 중 가장 긴 배열 출력하기.
let Arr = [['a','b','c'], [1,2,3,4,5],['가','나','다']];
function p(arr) {
let res;
return arr.reduce(function(ar,ar2) {
```
//arr 인자들을 순회한다.
// 이때 초기값을 따로 설정하지 않았기 때문에 reduce의 속성으로 arr[0]이 초기값으로 설정된다.
// arr[0] = ['a','b','c']
// arr[1] = [1,2,3,4,5]
// arr[2] = ['가','나','다']
```
if (ar.length < ar2.length) {
res = ar2
return
}
```
// ar의 길이가 ar의 다음 인자인 ar2의 길이보다 작다면 결과값으로 ar2가 된다.
// 결과값 된 ar2는 비교할 기준값으로 적용되고, ar2의 다음 인자인 ar3와 ar2가 비교된다.
```
res = ar;
```
//만약 기준값보다 큰 값이 없다면 ar이 최종 결과값이 된다.
```
});
return res;
```
//reduce의 과정을 통해 출력된 값이 arr.reduce값으로 리턴된다.
```
}
p(Arr);
->undefinded
여기서 p(Arr) 값이 undefinded가 나온 이유는 ?
res = ar; 값으로만 써주고 return을 기입하지 않았기 때문에!
return을 꼭 출력시켜야줘야 하는 이유는
_.reduce는 return을 기준으로 최종으로 출력된 값이 기준값으로 적용된다.
//if (ar.length < ar2.length) {
Arr[0] < Arr[1] 둘의 길이를 비교 (초기 기준값이 없으므로 초기 기준값은 자동으로 배열의 첫번째 인자)
// res = ar2
res = Arr[1]
// return
//if (ar.length < ar2.length) {
ar =Arr[1] ar2 =Arr[2] (리턴이 되면 최종결과 값이 기준값이 된다.)
Arr[1] > Arr[2] // 조건이 성립하지 않기 때문에 if 문에서 빠져나온다.
//res = ar;
res = Arr[1]
2번째 순회의 최종결과는 Arr[1]이 된다. 하지만 return이 없으므로 기준값으로 Arr[1]이 아닌
undefinded가 기준값으로 적용된다.
//});
//return res;
return이 없을 경우 아무런 결과값이 없는 undefined이 기준값으로 적용되기 때문이다.
//(undefined + 1 = undefined)
마지막 최종값이 undefined가 나오게 된 것!
_.reduce를 사용할 때에는 기준을 적용한 후 기준안에서의 최종결과에도 return을 꼭 써야한다.
댓글