ํ์ต๋ชฉํ
forEach() ,indexOf(), map(), slice(), reduce(), filter()์ ๊ฐ์ ๋ฉ์๋๋ฅผ
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ง๋ค๊ณ ๋ง๋ ํจ์๋ฅผ ์ฝ๋ฐฑํ์ฌ ๋ค๋ฅธ ํจ์๋ฅผ ๋ง๋ค์ด๋ณด์!๐
(๋น๋๊ธฐ์์ ์ฝ๋ฐฑ์ ์ํํ ์ฐ๊ธฐ์ํ ์ ํํ์ต)
๋ง๋ ๊ฒ
์์ .slice()
_.slice = function (arr, start, end) {
let _start = start || 0,
_end = end;
// ์
๋ ฅ๋ฐ์ ์ธ๋ฑ์ค๊ฐ ์์์ผ ๊ฒฝ์ฐ, ๋ง์ง๋ง ์ธ๋ฑ์ค๋ถํฐ ๋งค์นญ
// (ex. -1 => arr.length - 1, -2 => arr.length - 2)
// ์
๋ ฅ๋ฐ์ ์ธ๋ฑ์ค๋ 0 ์ด์์ด์ด์ผ ํ๋ค.
if (start < 0) _start = Math.max(0, arr.length + start);
if (end < 0) _end = Math.max(0, arr.length + end);
// `end`๊ฐ ์๋ต๋ ๊ฒฝ์ฐ(undefined), slice๋ ๋ง์ง๋ง ์ธ๋ฑ์ค๊น์ง ๋์
// `end`๊ฐ ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ, slice๋ ๋ง์ง๋ง ์ธ๋ฑ์ค๊น์ง ๋์
if (_end === undefined || _end > arr.length) _end = arr.length;
let result = [];
// `start`๊ฐ ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ, ๋น ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค.
for (let i = _start; i < _end; i++) {
result.push(arr[i]);
}
return result;
};
1.take()
// _.take๋ ๋ฐฐ์ด์ ์ฒ์ n๊ฐ์ element๋ฅผ ๋ด์ ์๋ก์ด ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค.
// n์ด undefined์ด๊ฑฐ๋ ์์์ธ ๊ฒฝ์ฐ, ๋น ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค.
// n์ด ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ, ์ ์ฒด ๋ฐฐ์ด์ shallow copyํ ์๋ก์ด ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค.
_.take = function (arr, n) {
if( n === undefined || n === 0){ // ์กฐ๊ฑด์ ๋ง์ง์์ ๊ฒฝ์ฐ๋ฅผ ์ํด ์กฐ๊ฑด๋ฌธ
return [];
}else{
return _.slice(arr,0,n); //n์ด ์์์ธ ๊ฒฝ์ฐ ์์ slide()๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด๋ฐฐ์ด์ ๋ฆฌํดํ๋ค
}
};
2.forEach()
//iteratee๋ ์ต๋ช
ํจ์ function(letter) { iterations.push(letter); });
* const letters = ['a', 'b', 'c'];
* const iterations = [];
* _.each(letters, function(letter) {
* iterations.push(letter);
* });
* expect(iterations).to.eql(['a', 'b', 'c']);
* iteratee๋ ์ฐจ๋ก๋๋ก ๋ฐ์ดํฐ(element ๋๋ value), ์ ๊ทผ์(index ๋๋ key),
* collection์ ๋ค๋ฃฐ ์ ์์ด์ผ ํฉ๋๋ค.
* ๋ฐฐ์ด arr์ ์
๋ ฅ๋ฐ์ ๊ฒฝ์ฐ, iteratee(ele, idx, arr)
* ๊ฐ์ฒด obj๋ฅผ ์
๋ ฅ๋ฐ์ ๊ฒฝ์ฐ, iteratee(val, key, obj)
* ์ด์ฒ๋ผ collection์ ๋ชจ๋ ์ ๋ณด๊ฐ iteratee์ ์ธ์๋ก ์ ์ ๋ฌ๋์ด์ผ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค๋ฃฐ ์ ์์ต๋๋ค.
* ์ค์ ๋ก ์ ๋ฌ๋๋ callback ํจ์๋ collection์ ๋ชจ๋ ์ ๋ณด๊ฐ ํ์ํ์ง ์์ ์๋ ์์ต๋๋ค.
_.each = function (collection, iteratee) {
//๋ฐฐ์ด์ธ๊ฒฝ์ฐ
if (Array.isArray(collection)){ //๋ฐฐ์ด์ธ์ง ์ฒดํฌ
for(let i = 0; i < collection.length; i++){ //์ธ์๋ก ๋ฐ์ ๋ฑ
์ด์ ๋ญ์ค๋งํผ ๋ฐ๋ณต
iteratee(collection[i],i,collection); //iterateeํจ์์ ์ธ์๋ฅผ ๋ฃ์ด์ค
}
//๊ฐ์ฒด
}else if(typeof collection === 'object'){ //๊ฐ์ฒด์ธ์ง ์ฒดํฌ
for(let key in collection){ //for in์ผ๋ก ๊ฐ์ฒด์ ํค ์ํ
iteratee(collection[key],key,collection) // ๊ฐ, ํค, ๋ฐฐ์ด์ ์ธ์๋ก ๋ฃ์ด์ค
}
}
};
3.filter()
// _.filter๋ test ํจ์๋ฅผ ํต๊ณผํ๋ ๋ชจ๋ ์์๋ฅผ ๋ด์ ์๋ก์ด ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค.
// test(element)์ ๊ฒฐ๊ณผ(return ๊ฐ)๊ฐ truthy์ผ ๊ฒฝ์ฐ, ํต๊ณผ์
๋๋ค.
// test ํจ์๋ ๊ฐ ์์์ ๋ฐ๋ณต ์ ์ฉ๋ฉ๋๋ค.
_.filter = function (arr, test) {
let result = []; //filter ํต๊ณผ๋ ์์ ๋ด์์ค ๋น๋ฐฐ์ด ํ ๋น
_.each(arr, function (n) { //๊ฐ์์๋ฅผ ์กฐํํ๋ each()์ฌ์ฉ
if(test(n)){ //์ธ์ n์ด testํจ์๋ฅผ truthyํ๊ฒ ํต๊ณผํ๋ฉด
result.push(n); //๋น๋ฐฐ์ด์ ์์n์ pushํจ.
};
});
return result; //์ํํ ์๋ฐฐ์ด ๋ฆฌํด
};
4.reduce()
_.reduce = function (arr, iteratee, initVal) { // _.reduce(๋ฐฐ์ด, iteratee, ์ด๊ธฐ๊ฐ)
let acc = initVal //์ด๊ธฐ๊ฐ์ ์ฃผ๊ธฐ์ํด acc์ inutValํ ๋น
_.each(arr, function(ele, idx){
if(initVal === undefined && idx === 0){
//์ด๊ธฐ๊ฐ์ด ์๊ฑฐ๋ ์ธ๋ฑ์ค๊ฐ 0์ด๋ฉด acc๋ ์ํ์์์ 0๋ฒํ ๋น
acc = ele;
}else{ //๊ทธ์ธ์ ๊ฒฝ์ฐ์
acc = iteratee(acc,ele,idx,arr); //acc์ ํจ์ ํ ๋น(์์ ๋ํ๋ํจ์์)
//iteratee(์์ถ๊ฐacc, ๋ฐ์ดํฐele, ์ ๊ทผ์idx, ์๋ณธ๋ฐฐ์ด arr)
}
})
return acc; ๋ชจ๋ ์์๊ฐ ์์ถ๋จ acc๋ฆฌํด
};
//์๋ ์ด๋ ๊ฒ ์
// return arr.reduce((acc,cur)=>{
// return acc+ cur
// },0)//initval
๋๋์
์๋ฐ์คํฌ๋ฆฝํธ ํ๋๋ค ๋ฉ์๋ ๋ง๋ค์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
ํ์ํ ๋ฉ์๋ ์ธ๋๋ง๋ค ๊ฐ์ฌํ ๋ง์์ผ๋ก ์ฌ์ฉํ๊ฒ ์ต๋๋ค..๐ข
์ฝ๋ฐฑํจ์๋ฅผ ์์ํ๋ ๋ฐฉ๋ฒ์ ์ตํ๊ณ , ๋ฉ์๋์ ๋ก์ง์ ์์๊ฐ๋ ์๊ฐ์ด ๋์๋ค.
์ฝ๋ฐฑ๊ณผ ์ฌ๊ท,์๋ฃ๊ตฌ์กฐ๋ ์ ์ตํ๋์ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๋ค์ ๊ณต๋ถ๋ฐฉํฅ
๋ด์ผ์ ๋น๋๊ธฐ๋ฅผ ๋ฐฐ์ด๋ค.
๋น๋๊ธฐ ๊ณผ์ ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ํ๋, ๋ด์ผ๋ ๋ธ๋ก๊ทธ ์ ๋ฆฌ๋ฅผ ํด๋์ด์ผ ๊ฒ ๋ค.
'TIL -์ผ๊ฐํ์ต๊ธฐ๋ก > Java Script' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น๋๊ธฐ ํ๋ฆ ์ดํดํ๊ธฐ (0) | 2022.02.13 |
---|---|
Class์ Instance (0) | 2022.01.22 |
Array์ Object์ ๊ฐ ์ฌ์ฉํ๊ธฐ (0) | 2022.01.16 |
3W_JS_ํด๋ก์ ํจ์ (0) | 2021.12.29 |
3W_JS_Scope (0) | 2021.12.29 |
๋๊ธ