: 수(num)와 배열을 입력받아 차례대로 num개의 요소만 포함된 새로운 배열을 리턴해야 합니다.
function take(num, arr) { // 입력: num, arr -> 출력: num개의 요소만 포함된 새로운 배열 // ✨ basecase(더이상 쪼개지지 않는 경우) : arr의 길이가 0이거나 num이 0이라면 if(arr.length===0 || num === 0){ // 빈 배열을 리턴 return []; } // ✨recursive case (그렇지 않은 경우) // 배열의 첫번째 요소를 head변수에 저장 const head = arr[0] // 배열의 1번째 요소부터 마지막 요소까지 tail에 저장 const tail = arr.slice(1) // head에 저장된 변수를 배열로 감싸고, concat을 통해 take함수의 리턴값을 합친다. return [head].concat(take(num-1,tail)) } ```
ex > ①. take( 2, [1,2,3,4] )를 입력받은 경우
[]
를 리턴[1,2]
가 된다: 배열을 입력받아 순서가 뒤집힌 배열을 리턴해야 합니다.
function reverseArr(arr) { // 입력 : 배열 -> 출력: 순서가 뒤집힌 배열 // ✨ basecase(더이상 쪼개지지 않는 경우) : arr의 길이가 0인 경우 if(arr.length === 0){ // 빈 배열을 리턴 return [] } // ✨recursive case (그렇지 않은 경우) // 배열의 첫번째 요소를 head변수에 저장 let head = arr[0] // 배열의 1번째 요소부터 마지막 요소까지 tail에 저장 let tail = arr.slice(1) // 재귀함수에 tail을 넣어주고 결과값을 concat으로 head와 합쳐준다 return reverseArr(tail).concat(head); } ```
ex > ①. reverseArr([1, 2, 3])
return
reverseArr([2,3]).concat(1)reverseArr([2,3])
return
reverseArr([3]).concat(2)reverseArr([3])
return
reverseArr([ ]).concat(3): 다차원 배열을 입력받아 1차원 배열로 변환하여 리턴해야 합니다.
function flattenArr(arr) { // ✨ base case (더이상 쪼개지지 않는 경우) if (arr.length === 0) { // 빈 배열 리턴 return []; } // ✨ recursive case ( 그렇지 않은 경우 ) // 배열의 첫번째 요소를 head변수에 저장 const head = arr[0]; // 배열의 1번째 요소부터 마지막 요소까지 tail에 저장 const tail = arr.slice(1); // 만약 첫번째 요소가 배열이라면 ? if (Array.isArray(head)) { // 스프레드 문법을 통해 배열을 풀어준 뒤 다시 재귀함수에 입력 return flattenArr([...head, ...tail]); } else { // 해당 요소가 배열이 아니라면 ? ( head의 배열이 spread문법으로 일차원으로 변경된 상태 ) // 배열이 아닌 head값은 []로 감싸주고 tail에 할당된 배열을 재귀함수에 입력 return [head].concat(flattenArr(tail)); } } ```
flattenArr([[1], 2, [3, 4], 5])