_.reduce = function (arr, iteratee, initVal) { //arr.reduce(iteratee,initVal) //초기값을 입력받은경우 // iteratee() 함수만들어주기 arr = _.slice(arr); //입력받은 배열을 변경하면 안돼서 배열을 있는 그대로 복사 let acc = initVal; //이 세 번째 인자로 초기 값이 전달되는 경우 그 값을 누적값의 기초(acc)로 하여 let index = 0; //배열의 '첫 번째' 요소부터 반복 작업이 수행됩니다 if( initVal === undefined){ //반면 초기 값이 전달되지 않은 경우 [] acc = arr[0] //첫번째요소를 출발로하여 [1] index = 1 // 배열의 '두 번째' 요소부터 반복 작업이 수행됩니다. index = 1 arr.shift(); // arr[1]부터 반복작업이 수행됩니다 -> 첫번째요소를 지워줌 [3] } _.each(arr, function(ele){ //배열의 모든요소 가 [1,2,3,4,5] acc = iteratee(acc, ele, index, arr) // 6 , 3 , 3 ,[] // iteratee 함수에 넣어서 적용 -> 그게 누적값 index = index + 1 //반복할때마다 -> 인덱스가 늘어남 -> 다음인덱스 }) return acc; };
_.pluck = function (arr, keyOrIdx) { //[{a: 1}] [ [a,1] ] key 또는 index //obj[a] 또는 a,1 을 새로운 배열에 저장하고 // return 새로운배열 //map 을 사용 해야만함 let result = []; //빈배열에 _.map(arr, function(el){ //map을 이용해서 각 요소마다 함수를 적용해 result.push(el[keyOrIdx]); //함수결과값을 result에 푸쉬 el[keyOrIdx] el[keyOrIdx] }) //1.새로운 배열을 만들어서 //2.map을 이용해서 현재받아온 arr를 함수를 적용시켜서 //3.map의 결과값을 새로운 빈배열에 push //4.새로운 배열을 리턴 return result; };
내장 메소드를 구현해보는 과제였는데
처음에는 쉬웠는데
갈수록 내가 부족한 부분들은 여과없이 오랜시간동안 생각해야했는데
다행히 페어분이 해결책을 제시해 주셔서 무사히 끝냈다