라이브러리(Library)
Underbar
underbar 구현
_.each
_.each = function (collection, iteratee) { // iteratee 함수가 입력값으로 들어온다. // iteratee은 배열의 각 요소를 인자로 넣고 실행할 함수 // 배열인지 아닌지 검사 // 배열이면 순회해서 iteratee를 실행하는 코드를 작성 // 객체라면 for in 문을 사용해서 순회 if(Array.isArray(collection)){ for(let i = 0; i < collection.length; i++) { // i를 인덱스로 사용하여 배열의 각 요소들을 참조할 수 있다. iteratee(collection[i], i, collection); } } else { for(let key in collection){ iteratee(collection[key], key, collection); } } } };
_.reduce
_.reduce = function (arr, iteratee, initVal) { // 초기값(initVal)을 매개변수로 받았다면 initVal을 초기값으로 할당한다. // 초기값(initVal)을 받지 못했다면 배열의 첫 요소를 초기값으로 할당한다. let result = initVal !== undefined ? initVal : arr[0]; // 조건1. 만들어진 _.each를 사용 _.each(arr, function(el, index, arr){ // 조건2. 초기값 매개변수가 없다면 배열 첫 요소를 초기값으로 하고, // 두번째 요소부터 작동시킨다. // 초기값을 받지 못했고, 배열의 첫요소를 받았다면 반환한다. if(initVal === undefined && index === 0){ return; } result = iteratee(result, el, index, arr); }) return result; };