TIL_2020.04.15(수) - call-by-reference, sort()를 이용한 랜덤

nRecode·2020년 4월 15일
0

TodayILearned

목록 보기
21/95

CALL BY REFERENCE

underbar문제의 다차원 배열을 가져와, 다 1차원 배열로 바꾸는 문제를 푸는 도중 이해가 안가는 부분이었다.

_.flatten = function(nestedArray, result = []){
//생략
if(Array.isArray(nestedArray[i])){
  _.flatten(nestedArray[i],result);
}
 //생략

}
//afterpush: 1
//afterpush: 2
//afterpush: 3
//afterpush: 4

에서 if문 안의 _.flatten에 result라는 매개변수를 넣지 않으면 배열의 마지막 요소가 아닌 첫번째 요소를 return하였는데 이는 result의 값을 선언해주지 않아 result가 선언되지 않아 빈배열 result가 또 만들어지고 그 result는 처음함수를 선언할때의 매개변수인 result와 다른 주소를 참조하고 있어서 결국 최종 return하는 값은 [1]이었다.

sort()랜덤 만들기

어제 Math.random()을 통해
배열을 랜덤으로 정렬하는 했는데 난수가 생각보다 고르게 생성되지 않아서 테스트 케이스를 통과하지 못하는 경우가 있었다. 그래서 sort()를 사용하여 풀었다.

newArr.sort(function(a,b){
  return .5 - Math.random();
})  

리턴값이 0보다 작으면 앞쪽에, 0보다 크면 뒤쪽에 배열을 정리하는 .sort()의 callback function의 특성을 이용한 것이다.
(Math.random()은 0에서 1사이의 난수를 생성한다.)
0.5가 아니라 .5로 해도 되는구나...

Reference
mdn - sort()
자바스크립트에서의 바람직한 랜덤 배열 (fitting random array in javascript)

profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글