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)