function listPrimes(num) {
let result = '2';
// 변수result에 string type의 "2"를 할당 (최초의 소수)
for (let candi = 3; candi <= num; candi += 2) {
// 숫자 3부터 2씩 증가하는 반복문 (num에 도달할 때까지)
let isPrime = true;
let sqrt = parseInt(Math.sqrt(candi));
// Math.sqrt는 값에 루트(√ )를 씌운 제곱근
// parseInt는 해당하는 값을 숫자 타입으로 변경 (특정 진법이 입력되면 그대로, 아니면 10진법)
// 매개변수가 음수일 경우, NaN
// 변수sqrt는 candi에 루트를 씌운 제곱근을 숫자타입으로 변경한 값
for (let divider = 3; divider <= sqrt; divider += 2) {
// 숫자 3부터 2씩 증가하는 반복문 (sqrt에 도달할 때까지) // candi확인
if (candi % divider === 0) {
// 만일 candi를 divider로 나눈 값이 0일때 // 소수가 아님
isPrime = false;
// isPrim은 false 가 되고
break;
// 탈출
}
}
if (isPrime) {
// isPrime이 참일때 // 소수
result = `${result}-${candi}`;
// result는 "2"에서 시작하여 candi값을 나열
}
}
return result;
}
_.shuffle = function (arr) {
// arr 배열을 매개변수로 입력
let arrCloned = arr.slice();
// (slice) : 배열의 begin부터 end까지(end 미포함)에 대한 얕은 복사본을 새로운 배열 객체로 반환
// 원본 배열 변화 X
for (let fromIdx = 0; fromIdx < arr.length; fromIdx++) {
// fromIdx라는 변수를 선언하여, arr의 인덱스 0부터 전체 길이까지 반복할 준비
const toIdx = Math.floor(Math.random() * arr.length);
// Math.floor() : 주어진 숫자 이하의 가장 큰 정수 반환
// Math.random() : 0 이상 1 미만의 구간에서 근사적으로 균일한 부동소숫점 의사난수를 반환
// toIdx는 랜덤 숫자 생성 (0~)
let temp = arrCloned[fromIdx];
// temp 변수에 fromIdx번째 요소 할당
arrCloned[fromIdx] = arrCloned[toIdx];
// fromIdx번째 요소 자리에 toIdx번째 요소의 값을 할당
arrCloned[toIdx] = temp;
// toIdx번째 요소 자리에 temp의 값 할당
}
return arrCloned;
};
: suffle 함수의 기능은 인자로 주어진 배열의 element들을 무작위로 섞고, 섞여진 배열을 반환한다.
전체 배열의 길이만큼 반복할 수 있도록 for loop 또는 while 을 사용할 수 있다.
여기서, Math.random 함수를 사용하여 0부터 시작하여 배열의 길이만큼 랜덤하게 섞는 기능을 수행한다.
이 결과를 각 변수를 선언해 값을 옮겨가며, 전체 배열의 길이만큼 반복할 수 있도록 한다.
/ 로또 추첨 / 제비뽑기 등
const filterMaped = arr.filter(x => x%2 !== 0).map(x => x*2);
console.log(filterMaped) // [2, 6, 10]
// reduce를 사용하기
const filterMaped = arr.reduce((acc,cur) => { if (cur % 2) acc.push(cur*2); return acc; },[]); // [2, 6, 10]
reduce함수는 filter와 map을 완전하게 대체할 수 있다.
배열의 각 요소들을 반복하면서 값들을 조합해서(=리듀서 함수를 실행) 특정 값을 만든다. 위에서는 출력된 특정 값을 배열에 넣었다.
acc는 accumulate로 누산기 라고 번역할 수 있다.
cur는 curentValue로 현재 값이라고 번역할 수 있다.
현재 값들에서 2로 나눈 나머지에 2를 곱해 filter를 통해 2를 나눠준 값과, map을 통해 전체에 2를 곱한 값과 같은 결과를 배출했다.