[JavaScript] ๋ฐฐ์ด ๋ฉ์๋์ ๋ํด ์์๋ณด๊ธฐ(Map,Filter,Reduce,Find,ForEach)
๐ท Map
์ฃผ์ด์ง ๋ฐฐ์ด์ ๊ฐ์ ์ฌ์ ์ ํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฐฐ์ด์ ์์๋ฅผ ์ธ๋ฑ์ค ์์ผ๋ก ์ธ์๋ก ์ ๋ฌํ์ฌ callbackํจ์๋ก ๋ฐํ ๋ฐ์ ์๋ก์ด ๊ฐ์ ์ ์ํ๋ค.
let money = [1, 2, 3, 4];
console.log(money);
result = money.map((m) => m + m * 0.5);
console.log(result);
๐ money์ ์์๊ฐ m ์ธ์๋ฅผ ํตํด ์ธ๋ฑ์ค ์์ผ๋ก ์ ๋ฌ๋์ด ์ฐ์ฐ์ ํตํด ์๋ก์ด ๊ฐ์ด result์ ๋ฐฐ์ด ์์๋ก ํ ๋น
๐น map์ callBack ์ธ์
์ธ์ ์์น ์์์ ๋ฐ๋ผ ๋ค์ด๊ฐ๋ ๊ฐ์ด ๋ค๋ฅด๋ค.
map ((์์์ ๊ฐ, index , ์ํํ๋ ๋์)
result = money.map((m, i, s) => {
document.write(`<br> ${i}๋ฒ์จฐ ์์ ๊ฐ: ${m} ์ ์ฒด : ${s}`);
});
console.log(result);
โ ๏ธ map ์ฌ์ฉ ์ ์ฃผ์ ์ฌํญ
- map ์ฝ๋ฐฑํจ์ ๋ด์์ push๋ data : ์ ์ฉ ์๋
- map ์ฝ๋ฐฑํจ์ ๋ด์์ pop๋ data : ์ ์ฉ ๋
์ ๋ฐฐ์ด์๋ ์ ์ฉ๋์ง ์์ง๋ง ์ง์ ์ถ๊ฐ ๋๋ ๋ฐฐ์ด์๋ ์ ์ฉ์ด ๋๋ค.
์ฝ๋ฐฑ ํจ์์์ push ๋ฐ์
result = money.map((m) => {
money.push(123);
return m * m;
});
๐ ๋ฐํ๋๋ ๊ฐ์๋ push๊ฐ ๋ฐ์๋์ง ์๋๋ค.
๋ค๋ง money์๋ push๊ฐ ๋ฐ์๋๋ค.
์ฝ๋ฐฑํจ์์ pop() ์ ์ฉ
// money : [30, 50, 100, 120, 123, 123, 123, 123]
result = money.map((m) => {
money.pop();
return m * m;
});
console.log(result); //[900, 2500, 10000, 14400]
console.log(money); //[30, 50, 100, 120]
๐ ์ฝ๋ฐฑํจ์ ๋ด์์ pop()์ด ๋ฐ์๋์ด ์ง์์ง ๊ฑธ ์ ์ ์๋ค.
๐ท Fillter
๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ ๊ณต๋ callbackFn ํจ์๋ฅผ ํ ๋ฒ์ฉ ํธ์ถํ๊ณ ,
์กฐ๊ฑด์ ์ฑ๋ฆฝํ ๊ฒฝ์ฐ ์ ๋ฐฐ์ด์ ์์๋ฅผ ์ถ๊ฐ ํ๋ค.
result = words.filter((m) => {
if (m.length >= 5) return m;
});
console.log(result);
๐ ๊ธธ์ด๊ฐ 5 ์ด์์ธ ๋ฌธ์์ด๋ก ๋ฐฐ์ด ์ฑ์์ง
๐ก ๋ง์ฝ ํํฐ์ ์ฌ ์ฌ์ฉ์ฑ์ด ๋์ ๊ฒฝ์ฐ function์ ์์ฑํด๋๊ณ ์ฌ์ฉ
callBackํจ์๋ฅผ ์ ๋ฌํ ๋๋ () ์ ์ธํ๊ณ ์ด๋ฆ๋ง ๋ฃ์ด๋ ๋๋ค.
filter๋ฅผ ํตํด ์๋์ผ๋ก ์ธ๋ฑ์ค ์์ผ๋ก ์์๊ฐ ์ ๋ฌ๋๋ค.
function lengthCheck(i) {
if (i.length >= 5) return i;
}
result = words.filter(lengthCheck);
console.log(result);
๐ค map() ์ผ๋ก๋ ์กฐ๊ฑด์ ๋ง๊ฒ ์ถ๋ ฅ์ด ์๋ ๊น?
function lengthCheck(i) {
console.log(i);
if (i.length >= 5) return i;
}
result = words.map(lengthCheck);
console.log(result);
๐ ์กฐ๊ฑด์ ๋ง๋ ๋ฌธ์์ด์ด ๋ฐํ๋๊ธฐ๋ ํ๋
์กฐ๊ฑด์ ๋ง์ง ์์ ๋ฐํ ๋ฐ์ง ๋ชปํ ์์์ ๋น์๋ฆฌ๊ฐ ๊ทธ๋๋ก ๋จ์ undefined๋ก ์ฑ์์ง๊ฒ๋๋ค.
๐ท reduce()
๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด์ ์ฝ๋ฐฑํจ์ ๋ฆฌ๋์ ํจ์๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๊ฐ์ ๋์ ํ์ฌ
๋จ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์จ๋ค.
reduce(a , c)
- a ์ธ์ : accumulator๋ก ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋์ ๋ณด๊ดํ๋ค.
- c ์ธ์ : currentValue , ์ฐจ๋ก๋๋ก ์ ๋ฌ ๋๋ ๋ฐฐ์ด์ ๊ฐ
- ์ด๊ธฐ๊ฐ ์๋ต ๊ฐ๋ฅ ( ์๋ตํ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์์๋ก ์์ํ๊ฒ ๋๋ค.)
์์
- ์ด๊ธฐ๊ฐ์ 0์ผ๋ก ํ์ฌ money์ ๊ฐ๋ค์ ๋์ ํ๋ค.
a ์๋ ๋ํด์ง ๊ฐ๋ค์ด += ์ฐ์ฐ๋์ด ๋์ ๋๊ณ
c์๋ ์์๋ค์ด ์ธ๋ฑ์ค ์์๋๋ก ํธ์ถ๋์ด ์ฐ์ฐ๋๋ค.
result = money.reduce((a, c) => {
console.log(a, c);
return a + c;
}, 0);
console.log(result);
๐ ๊ฒฐ๊ณผ์ ์ผ๋ก result์ ๋ชจ๋ ๋์ ๋ ๊ฐ์ด ์ ์ฅ
๐น ๊ฐ์ฒด ๋ฐฐ์ด์์์ ํฉ์ฐ
- ๊ฐ์ฒด ๋ฐฐ์ด ์์ฑ
let sumObj = [
{ x: 1, y: 10 },
{ a: 100, b: 200 },
{ q: 50, w: 30 },
];
- ์ด๊ธฐ๊ฐ์ 0์ผ๋ก ํ๊ณ ๊ฐ์ฒด ์์๋ค์ ๊ฐ์ ๋์
result = sumObj.reduce((a, c) => a + c.x + c.y, 0);
- ๊ฒฐ๊ณผ
console.log(result);
๐ 391 (๋์ ๋ ๊ฐ)
๐ท find
์ฝ๋ฐฑํจ์๊ฐ ์ฐธ์ ๋ฐํํ ๋ ๊น์ง ๋ฐฐ์ด์ ์ํํ๋ฉฐ ๋ฐํ์ด ๋๋ฉด ์ค์งํ๊ณ
ํด๋น ์์๋ฅผ ๋ฐํํ๋ค.
์กฐ๊ฑด์ ๋ง๋ ์์๊ฐ ์์ด ๋ฐํ ํ์ง ๋ชปํ ๊ฒฝ์ฐ undefined๋ฅผ ๋ฐํํ๋ค.
๐ค filter์ ๋ค๋ฅธ์ ?
filter๋ ์กฐ๊ฑด์ ๋ง๋ ๋ชจ๋ ์์๋ฅผ ๋ค ๊ฐ์ ธ์ค๋ ๋ฐ๋ฉด
find๋ ์กฐ๊ฑด์ ๋ง๋ ์์๊ฐ ํ๋๋ผ๋ ์๊ธฐ๋ฉด ๊ทธ ํ๋๋ง ๊ฐ์ ธ์จ๋ค.
์์
- ๋ฐฐ์ด ์์ฑ
const inventory = [
{ name: "apple", quantity: 10 },
{ name: "banana", quantity: 20 },
{ name: "grape", quantity: 30 },
{ name: "mango", quantity: 40 },
{ name: "melon", quantity: 50 },
];
- fruit๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ฐ์์true ๋ฅผ ๋ฐํํ๋ฉด ๋ฐ๋ก ์ํ ์ข ๋ฃ
- fruit์ name ์์ฑ์ด ‘melon’ ์ด๋ผ๋ฉด true ๋ฐํ
result = inventory.find((fruit) => fruit.name == "melon");
๐ก ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถํด๋ฅผ ์ฌ์ฉํด์ ๋ ๊ฐํธํ๊ฒ
result = inventory.find(({ name }) => name == "melon");
๐ let {name} = inventory.๊ฐ์ฒด ์ธ ์ ์ด๋ค
๐ท forEach()
๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ ๊ณต๋ ์ฝ๋ฐฑํจ์๋ฅผ ์ธ๋ฑ์ค ์์๋ก ํ ๋ฒ์ฉ ํธ์ถํ๋ค.
๐ค map์ด๋ ์ฐจ์ด์ ์ด ๋ญ๊น?
forEach๋ return ์ด ์์ด undefined๋ง ๋ฐํํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์คํ์ ํ๊ณ ๋์๋ ์ถ๊ฐ๋ก ์์ ์ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ์ ๋ค๋ฅด๊ฒ map์ ๋ฐํ ๋๋ ๊ฐ์ ๋ฐ์์ ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ์ฌ ํ ๋นํ ์ ์๋ค.
โ map์์ return ์ ๋ฐํํ์ง ์๋๋ค๋ฉด?
result = words.map((m) => {
console.log(m);
});
console.log(result);
๐ ๊ฐ๊ฐ์ ์์๊ฐ ์ถ๋ ฅ์ ๋์ง๋ง ๋น ๋ฐฐ์ด์ ๋ฐํํ๊ฒ ๋์ด result๋ ๋น ๋ฐฐ์ด์ด ๋๋ค.
- forEach๋ก ๋ฐ์๋ณด๋ฉด?
result = words.forEach((m) => {
console.log(m);
});
console.log(result);
๐ ์์๋ ์ฐจ๋ก๋๋ก ์ถ๋ ฅ ๋๋ฉฐ, result๋ undefined ๋ฅผ ์ถ๋ ฅํ๊ฒ ๋๋ค.
๐คforEach๋ ์ธ์ ์ฌ์ฉํ ๊น?
์์ ์์ ์ ํ ๋ค ๊ฒฐ๊ณผ๋ฌผ์ ์ถ๋ ฅํ๋ ๋ง๋ฌด๋ฆฌ ๋ฉ์๋๋ก ์ฃผ๋ก ์ฌ์ฉํ๋ค.