์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐ๋ณต๋ฌธ์ ํ์์ ์ธ ๊ธฐ๋ฅ์ ๋๋ค. ๋ฐ๋ณต๋ฌธ์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ๋ค์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ๋ณต๋ฌธ์ ์ดํดํ๊ณ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
โฃ ๋ชฉ์ฐจ
๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด๋ฌธ๊ณผ ์์ฃผ ๊ฒฐํฉ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ์ ๋ณด๋ ์๋ ํฌ์คํ
์ ์ฐธ๊ณ ํด ์ฃผ์ธ์! ๐
[์๋ฐ์คํฌ๋ฆฝํธ]์๋ฐ์คํฌ๋ฆฝํธ ์กฐ๊ฑด๋ฌธ ์์ ์ ๋ณต: ๊ธฐ์ด๋ถํฐ ์ค์ ๊น์ง ํ ๋ฒ์ ๋ฐฐ์ฐ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ ์กฐ๊ฑด๋ฌธ์ ๋ก์ง์ ์ ์ดํ๋ ๋ฐ ํ์์ ์ธ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค์ํ ์กฐ๊ฑด๋ฌธ์ ๋ํด ์์๋ณด๊ณ , ์ด๋ณด์๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์์ ์ ์ค์ต์ ํตํด ํ
creativevista.tistory.com
๊ธฐ๋ณธ ๊ฐ๋ ๐
๋ฐ๋ณต๋ฌธ์ด๋?: ๋ฐ๋ณต๋ฌธ์ ํน์ ์ฝ๋๋ฅผ ์ฌ๋ฌ ๋ฒ ์คํํ ์ ์๋ ๊ตฌ์กฐ์
๋๋ค. ์ด๋ ๋ฐ๋ณต์ ์ธ ์์
์ ์๋ํํ๊ณ ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
์ ํ์ํ๊ฐ?: ๋ฐ๋ณต๋ฌธ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋, ๋์ผํ ์์ ์ ๋ฐ๋ณตํด์ผ ํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋, ํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋ ๋๊น์ง ์์ ์ ๋ฐ๋ณตํ ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ๋ณต๋ฌธ์ ์ข ๋ฅ๐
for ๋ฌธ
- ๋ฌธ๋ฒ ์ค๋ช : for ๋ฌธ์ ์ด๊ธฐํ, ์กฐ๊ฑด, ์ฆ๊ฐ ์ธ ๊ฐ์ง ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
for (initialization; condition; increment) {
// ์คํํ ์ฝ๋
}
- ์ฌ์ฉ ์์ : ์๋ ์์ ๋ 0๋ถํฐ 9๊น์ง์ ์ซ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
for (let i = 0; i < 10; i++) {
console.log(i);
}
- ์ฅ๋จ์ : ๋ช ํํ ๊ตฌ์กฐ๋ก ์ธํด ์ดํดํ๊ธฐ ์ฝ์ง๋ง, ๋ณต์กํ ์กฐ๊ฑด์์๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ์ ์์ต๋๋ค.
while ๋ฌธ
- ๋ฌธ๋ฒ ์ค๋ช : while ๋ฌธ์ ์กฐ๊ฑด์ด ์ฐธ์ธ ๋์ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค.
while (condition) {
// ์คํํ ์ฝ๋
}
- ์ฌ์ฉ ์์ : ์๋ ์์ ๋ 0๋ถํฐ 9๊น์ง์ ์ซ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
let i = 0;
while (i < 10) {
console.log(i);
i++;
}
- ์ฅ๋จ์ : ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฐ๋ณต ํ์๊ฐ ๋ฌ๋ผ์ง ๋ ์ ์ฉํ์ง๋ง, ๋ฌดํ ๋ฃจํ์ ๋น ์ง ์ํ์ด ์์ต๋๋ค.
do...while ๋ฌธ
- ๋ฌธ๋ฒ ์ค๋ช : do...while ๋ฌธ์ ์ฝ๋ ๋ธ๋ก์ ์ต์ํ ํ ๋ฒ ์คํํ ํ ์กฐ๊ฑด์ ๊ฒ์ฌํฉ๋๋ค.
do {
// ์คํํ ์ฝ๋
} while (condition);
- ์ฌ์ฉ ์์ : ์๋ ์์ ๋ 0๋ถํฐ 9๊น์ง์ ์ซ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
let i = 0;
do {
console.log(i);
i++;
} while (i < 10);
- ์ฅ๋จ์ : ์ต์ํ ํ ๋ฒ์ ์คํ๋์ด์ผ ํ๋ ์์ ์ ์ ์ฉํฉ๋๋ค.
for...in ๋ฌธ
- ๋ฌธ๋ฒ ์ค๋ช : for...in ๋ฌธ์ ๊ฐ์ฒด์ ์ด๊ฑฐ ๊ฐ๋ฅํ ์์ฑ์ ์ํํฉ๋๋ค.
for (variable in object) {
// ์คํํ ์ฝ๋
}
- ์ฌ์ฉ ์์ : ์๋ ์์ ๋ ๊ฐ์ฒด์ ํค์ ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
const obj = { a: 1, b: 2, c: 3 };
for (let key in obj) {
console.log(key, obj[key]);
}
- ์ฅ๋จ์ : ๊ฐ์ฒด ์ํ์ ์ ์ฉํ์ง๋ง, ๋ฐฐ์ด์๋ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
for...of ๋ฌธ
- ๋ฌธ๋ฒ ์ค๋ช : for...of ๋ฌธ์ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด(๋ฐฐ์ด ๋ฑ)๋ฅผ ์ํํฉ๋๋ค.
for (variable of iterable) {
// ์คํํ ์ฝ๋
}
- ์ฌ์ฉ ์์ : ์๋ ์์ ๋ ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
const arr = [1, 2, 3];
for (let value of arr) {
console.log(value);
}
- ์ฅ๋จ์ : ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ์ํํ๋ ๋ฐ ์ ํฉํฉ๋๋ค.
forEach ๋ฌธ
- ๋ฌธ๋ฒ ์ค๋ช : forEach ๋ฉ์๋๋ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ ๊ณต๋ ํจ์๋ฅผ ํ ๋ฒ์ฉ ์คํํฉ๋๋ค.
for (variable of iterable) {
// ์คํํ ์ฝ๋
}
- ์ฌ์ฉ ์์ : ์๋ ์์ ๋ ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
const arr = [1, 2, 3];
arr.forEach(value => console.log(value));
- ์ฅ๋จ์ : ๋ฐฐ์ด์ ์์๋ฅผ ๊ฐ๋จํ ์ฒ๋ฆฌํ ์ ์์ง๋ง, ์ค๊ฐ์ ๋ฐ๋ณต์ ๋ฉ์ถ ์ ์์ต๋๋ค.
map ๋ฉ์๋
- ๋ฌธ๋ฒ ์ค๋ช : map ๋ฉ์๋๋ ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๋ณํํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฐฐ์ด๋ก ๋ฐํํฉ๋๋ค.
const newArray = array.map(function(element, index, array) {
// ๋ฐํํ ๊ฐ
});
- ์ฌ์ฉ ์์ : ์๋ ์์ ๋ ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๋ ๋ฐฐ๋ก ๋ง๋ ์๋ก์ด ๋ฐฐ์ด์ ์ถ๋ ฅํฉ๋๋ค.
const arr = [1, 2, 3];
const newArr = arr.map(value => value * 2);
console.log(newArr);
- ์ฅ๋จ์ : ๋ฐฐ์ด์ ์์๋ฅผ ๋ณํํ์ฌ ์ ๋ฐฐ์ด์ ๋ง๋๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
Q: forEach์ map์ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น์?
A: forEach๋ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ํจ์๋ฅผ ์คํํ์ง๋ง, ๋ฐํ ๊ฐ์ด ์์ต๋๋ค. ๋ฐ๋ฉด, map์ ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๋ณํํ ์ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
๋ฐ๋ณต๋ฌธ ํ์ฉ ์ฌ๋ก๐ ๏ธ
๋ฐฐ์ด ์ํ: ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋, ํน์ ์กฐ๊ฑด์ ๋ง๋ ์์๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
const arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
๊ฐ์ฒด ์ํ: ๊ฐ์ฒด์ ํค์ ๊ฐ์ ์ถ๋ ฅํ๊ฑฐ๋, ํน์ ์กฐ๊ฑด์ ๋ง๋ ์์ฑ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
const obj = { a: 1, b: 2, c: 3 };
for (let key in obj) {
console.log(`${key}: ${obj[key]}`);
}
๋น๋๊ธฐ ์์
์์์ ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ: ๋น๋๊ธฐ ํจ์์ ํจ๊ป ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ์์ฐจ์ ์ผ๋ก ์์
์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
async function fetchData(urls) {
for (let url of urls) {
// ๊ฐ URL์ ๋ํด HTTP ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๊ธฐ๋ค๋ฆผ
let response = await fetch(url);
// ์๋ต ๋ฐ์ดํฐ๋ฅผ JSON์ผ๋ก ๋ณํํ๊ณ ๊ธฐ๋ค๋ฆผ
let data = await response.json();
// ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์์ ์ถ๋ ฅ
console.log(data);
}
}
๊ณ ๊ธ ํ์ฉ ๋ฐ ์ต์ ํ๐
์ค์ฒฉ ๋ฃจํ
์๋ฐ์คํฌ๋ฆฝํธ ์ค์ฒฉ ๋ฃจํ, ์ฆ ์ด์ค ๋ฐ๋ณต๋ฌธ์ 2์ฐจ์ ๋ฐฐ์ด์ด๋ ๋ค์ค ์กฐ๊ฑด์ ์ฒ๋ฆฌํ ๋ ์ ์ฉํฉ๋๋ค.
const matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
for (let i = 0; i < matrix.length; i++) {
for (let j = 0; j < matrix[i].length; j++) {
console.log(matrix[i][j]);
}
}
์ฑ๋ฅ ์ต์ ํ
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ๋ณต๋ฌธ์ ์ฑ๋ฅ์ ํฅ์ํ๊ธฐ ์ํด ์ธ๋ฑ์ค ์บ์ฑ, ๋ถํ์ํ ๊ณ์ฐ ์ ๊ฑฐ, ์ ์ ํ ๋ฐ๋ณต๋ฌธ ์ ํ ๋ฑ์ ๊ณ ๋ คํฉ๋๋ค.
1. ์ธ๋ฑ์ค ์บ์ฑ (Index Caching)
๋ฐ๋ณต๋ฌธ์์ ๋ฐฐ์ด์ ๊ธธ์ด ๋๋ ๋ค๋ฅธ ๋ฐ๋ณต ๊ณ์ฐ์ด ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, ์ด๋ฅผ ๋ฐ๋ณต๋ฌธ ์ธ๋ถ์ ์บ์ฑํ์ฌ ์ฑ๋ฅ์ ํฅ์ํ ์ ์์ต๋๋ค.
์์
์บ์ฑ ์ :
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
์บ์ฑ ํ:
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const length = arr.length;
for (let i = 0; i < length; i++) {
console.log(arr[i]);
}
arr.length๋ฅผ ๋ฐ๋ณต๋ฌธ ์ธ๋ถ์์ ํ ๋ฒ ๊ณ์ฐํ์ฌ length ๋ณ์์ ์ ์ฅํ๊ณ , ์ด๋ฅผ ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
2. ๋ถํ์ํ ๊ณ์ฐ ์ ๊ฑฐ (Eliminate Unnecessary Calculations)
๋ฐ๋ณต๋ฌธ ๋ด๋ถ์์ ๋ฐ๋ณต์ ์ผ๋ก ๊ณ์ฐ๋๋ ๊ฐ์ ๋ฏธ๋ฆฌ ๊ณ์ฐํ์ฌ ๋ณ์์ ์ ์ฅํจ์ผ๋ก์จ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์์
๋ถํ์ํ ๊ณ์ฐ:
const arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i] * Math.sqrt(arr.length));
}
๋ถํ์ํ ๊ณ์ฐ ์ ๊ฑฐ ํ:
const arr = [1, 2, 3, 4, 5];
const sqrtLength = Math.sqrt(arr.length);
for (let i = 0; i < arr.length; i++) {
console.log(arr[i] * sqrtLength);
}
๋ฐ๋ณต๋ฌธ ๋ด๋ถ์์ Math.sqrt(arr.length)๋ฅผ ๋งค๋ฒ ๊ณ์ฐํ๋ ๋์ , ์ด๋ฅผ ํ ๋ฒ ๊ณ์ฐํ์ฌ sqrtLength ๋ณ์์ ์ ์ฅํ๋ฉด ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
3. ์ ์ ํ ๋ฐ๋ณต๋ฌธ ์ ํ (Choose Appropriate Loop)
์ ์ ํ ๋ฐ๋ณต๋ฌธ์ ์ ํํจ์ผ๋ก์จ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐฐ์ด์ ๋จ์ํ ์ํํ ๋๋ for ๋ฃจํ๋ณด๋ค forEach, for...of ๋๋ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์
์ผ๋ฐ for ๋ฃจํ:
const arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
forEach ์ฌ์ฉ:
const arr = [1, 2, 3, 4, 5];
arr.forEach(value => {
console.log(value);
});
for...of ์ฌ์ฉ:
const arr = [1, 2, 3, 4, 5];
for (const value of arr) {
console.log(value);
}
์ผ๋ฐ์ ์ธ ๋ฐฐ์ด ์ํ์์๋ forEach๋ for...of๊ฐ ๊ฐ๊ฒฐํ๊ณ , ๋ด๋ถ ์ต์ ํ ๋๋ถ์ ์ฑ๋ฅ์ด ๋ ์ข์ ์ ์์ต๋๋ค.
4. ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์ DOM ์กฐ์ ์ต์ํ
DOM ์กฐ์์ ๋งค์ฐ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์ ์ ๋๋ค. ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์์ DOM ์กฐ์์ ์ต์ํํ๊ณ , ๊ฐ๋ฅํ ํ ๋ฒ์ ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์์
๋ฐ๋ณต๋ฌธ ๋ด๋ถ์ DOM ์กฐ์:
const items = ['Item1', 'Item2', 'Item3'];
const list = document.getElementById('list');
for (let i = 0; i < items.length; i++) {
const listItem = document.createElement('li');
listItem.textContent = items[i];
list.appendChild(listItem);
}
DOM ์กฐ์ ์ต์ํ:
const items = ['Item1', 'Item2', 'Item3'];
const list = document.getElementById('list');
const fragment = document.createDocumentFragment();
for (let i = 0; i < items.length; i++) {
const listItem = document.createElement('li');
listItem.textContent = items[i];
fragment.appendChild(listItem);
}
list.appendChild(fragment);
DOM ์กฐ์์ ํ ๋ฒ๋ง ์ํํ๋๋ก DocumentFragment๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
5. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
๊ฐ์ฒด ์์ฑ์ด๋ ๋ฐฐ์ด ๋ณต์ฌ๋ฅผ ์ต์ํํ๊ณ , ํ์ ์๋ ๋ณ์๋ ์ ์์ ํด์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค.
์์
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ:
const largeArray = new Array(1000000).fill(0);
// ํ์ํ ๋ถ๋ถ๋ง ์์
const processed = largeArray.map((val, idx) => idx % 2 === 0 ? val + 1 : val);
// ๋ฉ๋ชจ๋ฆฌ ํด์
largeArray.length = 0;
ํ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์์ ํด์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ๋ณต๋ฌธ ๋์ฒด ๊ธฐ๋ฒ
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ณ ์ฐจ ํจ์(map, filter, reduce)๋ ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต๋ฌธ์ ๋์ฒดํ ์ ์์ต๋๋ค.
const arr = [1, 2, 3, 4, 5];
const doubled = arr.map(value => value * 2);
console.log(doubled);
์๋ฐ์คํฌ๋ฆฝํธ์ filter์ reduce ํจ์๋ ๋ฐฐ์ด์ ์ฒ๋ฆฌํ๋๋ฐ ๋งค์ฐ ์ ์ฉํ ๊ณ ์ฐจ ํจ์์
๋๋ค. ๊ฐ ํจ์์ ๋ฌธ๋ฒ๊ณผ ์ฌ์ฉ ์์ ๋ฅผ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
filter ํจ์
filter ํจ์๋ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฃผ์ด์ง ์กฐ๊ฑด์ ํ ์คํธํ์ฌ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๋ค๋ก ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ญ๋๋ค.
๋ฌธ๋ฒ
const newArray = array.filter((element, index, array) => {
// ์กฐ๊ฑด์ ๋ฐํํ๋ ์ฝ๋
});
- element: ์ฒ๋ฆฌํ ํ์ฌ ์์.
- index: ์ฒ๋ฆฌํ ํ์ฌ ์์์ ์ธ๋ฑ์ค (์ ํ ์ฌํญ).
- array: filter๋ฅผ ํธ์ถํ ๋ฐฐ์ด (์ ํ ์ฌํญ).
์์
const numbers = [1, 2, 3, 4, 5, 6];
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4, 6]
์ ์์ ์์๋ ๋ฐฐ์ด numbers์์ ์ง์๋ง ํํฐ๋งํ์ฌ ์๋ก์ด ๋ฐฐ์ด evenNumbers๋ฅผ ์์ฑํฉ๋๋ค.
reduce ํจ์
reduce ํจ์๋ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฃผ์ด์ง ๋ฆฌ๋์(reducer) ํจ์๋ฅผ ์คํํ์ฌ ๋จ์ผ ์ถ๋ ฅ ๊ฐ์ ๋ฐํํฉ๋๋ค.
๋ฌธ๋ฒ
const result = array.reduce((accumulator, element, index, array) => {
// ๋์ฐ๊ธฐ๋ฅผ ๋ฐํํ๋ ์ฝ๋
}, initialValue);
- accumulator: ๋์ฐ๊ธฐ, ์ด์ ์์๋ค์ ์ฝ๋ฐฑ ํจ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํฉ๋๋ค.
- element: ์ฒ๋ฆฌํ ํ์ฌ ์์.
- index: ์ฒ๋ฆฌํ ํ์ฌ ์์์ ์ธ๋ฑ์ค (์ ํ ์ฌํญ).
- array: reduce๋ฅผ ํธ์ถํ ๋ฐฐ์ด (์ ํ ์ฌํญ).
- initialValue: ์ด๊ธฐ๊ฐ์ ์ง์ ํฉ๋๋ค. ์ด๊ธฐ๊ฐ์ ์ ๊ณตํ์ง ์์ผ๋ฉด ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์๊ฐ ์ด๊ธฐ๊ฐ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์์
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, currentValue) => acc + currentValue, 0);
console.log(sum); // 15
์ ์์ ์์๋ ๋ฐฐ์ด numbers์ ๋ชจ๋ ์์๋ฅผ ๋ํ์ฌ sum์ ์ ์ฅํฉ๋๋ค. 0์ ์ด๊ธฐ๊ฐ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์คํ ์์
์ ์์ ์ ์คํ ์์๋ฅผ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค.
1. ์ด๊ธฐ ์ํ:
- acc (๋์ฐ๊ธฐ) = 0 (์ด๊ธฐ๊ฐ)
- currentValue = ์ฒซ ๋ฒ์งธ ์์ (1)
2. ์ฒซ ๋ฒ์งธ ๋ฐ๋ณต:
- ๊ณ์ฐ: acc + currentValue => 0 + 1 => 1
- ๋์ฐ๊ธฐ(acc)์ ์๋ก์ด ๊ฐ: 1
- ๋ค์ currentValue = ๋ ๋ฒ์งธ ์์ (2)
3. ๋ ๋ฒ์งธ ๋ฐ๋ณต:
- ๊ณ์ฐ: acc + currentValue => 1 + 2 => 3
- ๋์ฐ๊ธฐ(acc)์ ์๋ก์ด ๊ฐ: 3
- ๋ค์ currentValue = ์ธ ๋ฒ์งธ ์์ (3)
4. ์ธ ๋ฒ์งธ ๋ฐ๋ณต:
- ๊ณ์ฐ: acc + currentValue => 3 + 3 => 6
- ๋์ฐ๊ธฐ(acc)์ ์๋ก์ด ๊ฐ: 6
- ๋ค์ currentValue = ๋ค ๋ฒ์งธ ์์ (4)
5. ๋ค ๋ฒ์งธ ๋ฐ๋ณต:
- ๊ณ์ฐ: acc + currentValue => 6 + 4 => 10
- ๋์ฐ๊ธฐ(acc)์ ์๋ก์ด ๊ฐ: 10
- ๋ค์ currentValue = ๋ค์ฏ ๋ฒ์งธ ์์ (5)
6. ๋ค์ฏ ๋ฒ์งธ ๋ฐ๋ณต:
- ๊ณ์ฐ: acc + currentValue => 10 + 5 => 15
- ๋์ฐ๊ธฐ(acc)์ ์๋ก์ด ๊ฐ: 15
7. ๋ฐ๋ณต ์ข ๋ฃ:
- ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์ฒ๋ฆฌํ์ผ๋ฏ๋ก reduce ํจ์๊ฐ ์ข ๋ฃ๋ฉ๋๋ค.
- ์ต์ข ๊ฒฐ๊ณผ๋ 15์ ๋๋ค.