본문 바로가기
2020-2021/Errors

10월 1일

by Tate_Modern 2020. 10. 1.

배열속에 배열들 중 가장 긴 배열 출력하기.

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을 꼭 써야한다. 

 

'2020-2021 > Errors' 카테고리의 다른 글

10월3일  (0) 2020.10.03
10월 2일  (0) 2020.10.02
28  (0) 2020.09.28
23일  (0) 2020.09.23
9월17일  (0) 2020.09.18

댓글