이전에 기초적인 자바스크립트 메소드들이 없을때는 사설 메소드 패키지인 lowdash를 가져다 썼다고 한다.
// _.take는 배열의 처음 n개의 element를 담은 새로운 배열을 리턴합니다.
// n이 undefined이거나 음수인 경우, 빈 배열을 리턴합니다.
// n이 배열의 길이를 벗어날 경우, 전체 배열을 shallow copy한 새로운 배열을 리턴합니다.
_.take = (arr, n) => {
// TODO: 여기에 코드를 작성합니다.
// 두번째 매개변수가 없으면, 빈배열을 반환합니다.
// 차례대로 n개의 요소를 가지는 배열 리턴
if (n === undefined || n === 0) {
return [];
} else {
let temp_list = [];
let _end = n;
if (_end > arr.length) {
return arr;
}
for (let i = 0; i < n; i++) {
temp_list[i] = arr[i];
}
return temp_list;
}
};
lowdash의 take 메소드는 배열에서 첫번째 인자부터 차례대로 가져와서 새로운 리스트를 반환한다.
그 조건에는 초기에 n 값이 음수이거나 undefined 이면 빈배열을 리턴해야했다. 조건문에서는 (||) or 가 둘중 하나만 만족한다 하더라도 뒤에 실해운을 시키게 된다.
잘못된 값을 N으로 넣으면 입력한 배열과 같은 배열을 넣기도 한다.
마지막으로n 번만큼 templist에 넣어 그 값을 반환한다.
2. Last 메소드
1. n이 들어오지 않을 경우 . arr[arr.length - 1] 를 통해 마지막 배열의 원소를 빼준다.
2. arr.length < n 조건을 활용해, 매개변수로 받은 n이 배열의 길이보다 클때 그대로 arr를 반환한다.
3 마지막으로 [arr.length -n +i]를 인덱스로 받아 마지막 부분에 있는 원소들을 새로운 배열 empty에 넣어 반환합니다.
3. each
_.each = (collection, iteratee) => {
// TODO: 여기에 코드를 작성합니다.
// 문제 1. 배열을 입력받은 경우, 배열을 순회하면서 배열의 요소에 접근할 수 있어야 합니다
if(Array.isArray(collection)){
for (let i = 0; i <collection.length;i++){
iteratee(collection[i], i, collection)
}// 객체를 입력받은 경우, 객체의 속성값, 속성이름, 객체 자체에 접근할 수 있어야 합니다
} else if (typeof collection ==='object'){
for (let key in collection) {
iteratee(collection[key], key, collection)
}
}
forEach 함수의 근간이 each 메소드를 만들어 봤다.
조건과 예시는 아래와 같다.
첫번째 조건문에서 Array.isArray(colletcion)을 통해 배열인지 확인한다.
iteratee : 각 요소에 적용할 콜백함수를 현재 요소, 현재 인덱스, 전체 배열에 대해 호출합니다.