์ค๋์ ์ฐ๋ฆฌ๊ฐ ํํ ์ฌ์ฉํ๋ ๋ฐฐ์ด ๋ด์ฅ ๋ฉ์๋๋ค์ ๊ตฌํํ๋ ๊ณผ์ ๊ฐ ์ฃผ์ด์ก๋ค.
Underbar๋ underscore.js, lodash ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชจํฐ๋ธ๋ก ํ์ฌ ์ฝ๋์คํ ์ด์ธ ์์ ์ง์ ๋ง๋ ๋ฐฐ์ด ๋ด์ฅ ๋ฉ์๋ ๊ตฌํ ๊ณผ์ ์ด๋ค.
๋๋ ์ด๋ฒ์ ๋ฐฐ์ด ๋ด์ฅ ๋ฉ์๋๋ค์ ์ง์ ์ด๋ป๊ฒ ๊ตฌํํ ์ง ์๊ฐํด๋ณด๊ณ ํ๋ ๊ณผ์ ์ด ์๊ณ ๋ฆฌ์ฆ ํ ๋ ์ฒ๋ผ ์ ๋ง ์ฌ๋ฐ๊ฒ ๋๊ปด์ก๋ค!!
์ค์ ๋ก ๋ฉ์๋๋ค์ด ์ด๋ป๊ฒ ์ฐ์๋์ง ์๊ฐํด๋ณด๋ฉด์ ๋ฌธ์ ๋ฅผ ํ์๋ ๊ฒ ๊ฐ๋ค!
๊ทธ๋์ ์ด๋ฒ ๊ณผ์ ๋ ์ ๋ง ์ฆ๊ฒ๊ฒ ํ๋ ๊ฒ ๊ฐ๋ค :)
๋ง์ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ๊ตฌํํ์ง๋ง ์ค๋์ ๊ทธ ์ค์์ ๋ํ์ ์ผ๋ก ๋ช ๊ฐ๋ง ๋ธ๋ก๊น ํด๋ณผ ์์ ์ด๋ค!
์ด ๋ฌธ์ ๋ ๋ฐฐ์ด์ธ์ง ๊ฐ์ฒด์ธ์ง ๊ตฌ๋ถ์ ํ๊ณ ์ฃผ์ด์ง ํจ์ iteratee๋ฅผ ์ ํ์ฉํด์ ๋ฐ๋ณต๋ฌธ ์ฒ๋ผ ๊ตฌํํ๋ ๋ฌธ์ ์๋ค.
ํํ ์๊ณ ์๋ forEach ๋ฉ์๋์ธ ๊ฒ ๊ฐ๋ค.
_.each = function (collection, iteratee) {
if (Array.isArray(collection)) {
// ๋ฐฐ์ด์ธ์ง ๊ตฌ๋ถ
for (let i = 0; i < collection.length; i++) {
iteratee(collection[i], i, collection); // collection์ ์์, ์ธ๋ฑ์ค, ๋ฐฐ์ด ์์ฒด์ ์ ๊ทผํ๋ค.
}
} else if (typeof collection === "object") {
for (let key in collection) {
iteratee(collection[key], key, collection);
}
}
};
์ด๋ฐ์์ผ๋ก ์ธ๋๋ฐ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด์๋ค. ์ค์ํ ํฌ์ธํธ๋ ํ์ ์ ๊ตฌ๋ถํ๊ณ ์ฃผ์ด์ง ํจ์๋ก ์ ๊ทผํ๋ ๊ฒ์ด์๋ค!
์ ๋ง ์น์ํ ๋ฌธ์ ์๋ค. filter๋ ๋ง์ด ์ฐ๋ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ํ์ด๋ณผ ์ ์์๋ค.
_.filter = function (arr, test) {
let result = [];
_.each(arr, function (item) {
if (test(item)) {
result.push(item);
}
});
return result;
};
test ํจ์๋ฅผ ํต๊ณผํ ์์๋ง ๋ด์์ฃผ๊ธฐ! ๋ง ๊ทธ๋๋ก ๊ฑธ๋ฌ์ฃผ๊ธฐ์๋ค!
์ด ๋ฌธ์ ๋ ๋ฏธ๋ฆฌ ๊ตฌํํ indexOf๋ฅผ ํ์ฉํด์ ํ ์ ์์๋ค.(์ค์ indexOf์ ๊ฐ์)
_.uniq = function (arr) {
let result = [];
_.each(arr, function (item) {
if (_.indexOf(result, item) === -1) {
result.push(item);
}
});
return result;
};
indexOf๊ฐ -1์ด๋ฉด ์ค๋ณต๋๋ ๊ฐ์ด ์๋ค๋ ๋ป์ด๋ฏ๋ก ์ด ์ ์ ํ์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์๋ค.
์ด ๋ฌธ์ ๋ ์ค์ reduce ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๊ฒ๊ณผ ๊ฐ์๋ค.
๊ทธ๋์ ์ด๊ธฐ๊ฐ์ด ์์๋์ ์์๋๋ฅผ ๊ตฌ๋ถ์ง์ด ์ด๋ป๊ฒ ์กฐ๊ฑด์ ๋ง๋ค์ด์ ํ์ง๊ฐ ๊ด๊ฑด์ด์๋ค.
_.reduce = function (arr, iteratee, initVal) {
let result = 0;
_.each(arr, function (item, idx) {
if (initVal === undefined) {
if (idx === 0) {
result = item;
} else {
result = iteratee(result, item);
}
} else {
initVal = iteratee(initVal, item, idx, arr);
result = initVal;
}
});
return result;
};
๋๊ฐ์ ๊ฒฝ์ฐ๋, ๊ฐ์ฅ ๋จผ์ ์ด๊ธฐ๊ฐ์ด ์๋์ง์ ์๋์ง๋ฅผ ๊ตฌ๋ถํ์๋ค.
๊ทธ ํ์ ์๋ ๊ฒฝ์ฐ๋ ์ด๊ธฐ๊ฐ์ ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์์๋ก ํด์ฃผ๊ณ ๊ทธ๋ค๋ก๋ ๋ฐ๋ณต์์ ์ ํด์ฃผ๋ iteratee๋ฅผ ํ์ฉํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๊ธฐ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋?
์ด๊ธฐ๊ฐ์ ๋ชจ๋ ์์์ ์ ๊ทผํด์ ๋ฐ๋ณต์์ ์ ๊ฑฐ์น ํ, ๋ค์ ํ ๋น์ ํด์ฃผ์๋ค.
์ค๋ ๊ณผ์ ๋ ์ ๋ง ์ฌ์ ๋กญ๊ฒ ์ ๋ง๋ฌด๋ฆฌ ํ ๊ฒ ๊ฐ์์ ๊ธฐ๋ถ์ด ์ข๋ค!
๋ด์ผ ์ธ๋๋ฐ ๊ณผ์ part2 ๊น์ง ๋๋ด๋ฉด ์ธ๋๋ฐ ์คํ๋ฆฐํธ๋ ๋์ด๋ค.
๐ ๋ด์ผ์ TIW(today I Will)
์ธ๋๋ฐ part2