underbar과제
1.identity
이 함수는 underbar의 기능 구현 및 테스트를 위해 재사용되는 함수입니다.(계속 반복시킴)
_.identity = function (val) {
// TODO: 여기에 코드를 작성합니다.
return val;
};
2.take
_.take = function (arr, n) {
// TODO: 여기에 코드를 작성합니다.
let _n = n;
if (_n === undefined || _n < 0) _n = 0;
return _.slice(arr, 0, _n);//n이 배열을 넘어설때는 slice에 조건이 있으므로 따로안써줘도 되는듯하다
};
3.drop
_.drop = function (arr, n) {
// TODO: 여기에 코드를 작성합니다.
let _n = n;
if (_n === undefined || _n < 0) _n = 0;
return _.slice(arr, _n, arr.length);
};
3.last
_.last = function (arr, n) {
// TODO: 여기에 코드를 작성합니다.
let _n = n;
if (_n === undefined || _n < 0) _n = 1;//마지막에서 1을 빼면 그다음값이 마지막요소이기 때문?
return _.drop(arr, arr.length - _n);//arr.length - _n의 값은 시작값 끝값은 정해지지 않은 것
}; //이건 레퍼런스
_.last = function (arr, n) {
// TODO: 여기에 코드를 작성합니다.
if(n===undefined || n <0){
return _.slice(arr,arr.length-1,arr.length);
}
if(n>arr.length){
return[...arr]
} //따로 조건을 안달아줘도 됨
let c= _.drop(arr,arr.length-n,arr.length);
return c;
};
4.each
_.each = function (collection, iteratee) {
// TODO: 여기에 코드를 작성합니다.
if (Array.isArray(collection)) {
for (let i = 0; i < collection.length; i++) {
iteratee(collection[i], i, collection);
}
} else {
for (let key in collection) {
iteratee(collection[key], key, collection);
}
}
};
5.filter
_.filter = function (arr, test) {
// TODO: 여기에 코드를 작성합니다.
let result =[];
_.each(arr, (ele, idx,arr)=>{//원래는 function(item)처럼 인자한개만 줘서했으나 더 정확하게 하려면 인자3개 다 넣는게 좋다
if(test(ele,idx,arr)){
result.push(ele);
};
});
return result;
};
6.reject
_.reject = function (arr, test) {
// TODO: 여기에 코드를 작성합니다.
// TIP: 위에서 구현한 `filter` 함수를 사용해서 `reject` 함수를 구현해 보세요.
let result = [];
_.each(arr, function(item){
if(!test(item)){
result.push(item);
}
});
return result;
};
7.uniq
_.uniq = function (arr) {
// TODO: 여기에 코드를 작성합니다.
let result = [];
_.each(arr, function (item) {
if (_.indexOf(result, item) === -1) {//result배열에 item이라는 요소가 -1 즉,존재하지 않을때를 나타냄
result.push(item);
}
});
return result;
};
8.map
_.map = function (arr, iteratee) {
// TODO: 여기에 코드를 작성합니다.
// _.map 함수는 매우 자주 사용됩니다.
// _.each 함수와 비슷하게 동작하지만, 각 요소에 iteratee를 적용한 결과를 리턴합니다.
let result = [];
_.each(arr, function (item) {
result.push(iteratee(item));
});
return result;
};
9.pluck
_.map = function (arr, iteratee) {
// TODO: 여기에 코드를 작성합니다.
// _.map 함수는 매우 자주 사용됩니다.
// _.each 함수와 비슷하게 동작하지만, 각 요소에 iteratee를 적용한 결과를 리턴합니다.
let result = [];
_.each(arr, function (item) {
result.push(iteratee(item));
});
return result;
};
또는 map을 사용해서
return _.map(arr,arr=>arr[keyOrIdx])
10.reduce
_.reduce = function (arr, iteratee, initVal) {
// TODO: 여기에 코드를 작성합니다.
let acc = initVal;
_.each(arr, (ele, idx, arr)=>{
if(acc === undefined){
acc = arr[0];
}else {
acc = iteratee( acc, ele, idx,arr);
}
});
return acc;
};