reduce()

choiceΒ·2021λ…„ 8μ›” 19일
0
post-thumbnail

πŸ“Œ reduce() λ©”μ†Œλ“œ

reduce()λ©”μ†Œλ“œλŠ” λ°°μ—΄μ˜ 각 μš”μ†Œμ— λŒ€ν•΄ 주어진 λ¦¬λ“€μ„œ(reducer) ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ³ , ν•˜λ‚˜μ˜ 결과값을 λ°˜ν™˜ν•˜λŠ” λ©”μ†Œλ“œμ΄λ‹€.
좜처 : MDN

λ¦¬λ“€μ„œ ν•¨μˆ˜λŠ” 4개의 μΈμžκ°’μ„ 가진닀.
1. λˆ„μ‚°κΈ° (acc)
2. ν˜„μž¬κ°’ (cur)
3. ν˜„μž¬ 인덱슀 (idx)
4. μ΄ˆκΈ°κ°’ (src)
λ¦¬λ“€μ„œ ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ€ λˆ„μ‚°κΈ°μ— ν• λ‹Ήν•˜κ³  λˆ„μ‚°κΈ°λŠ” 순회 쀑 μœ μ§€λ˜λ―€λ‘œ κ²°κ΅­ μ΅œμ’… ν•˜λ‚˜μ˜ 값이 λœλ‹€!

reduce() ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€. (μ΄ˆκΈ°κ°’μ€ μƒλž΅ν•  수 μžˆλ‹€)

λ°°μ—΄.reduce((λˆ„μ‚°κΈ°, ν˜„μž¬κ°’, ν˜„μž¬μΈλ±μŠ€, μš”μ†Œ) => {
	return κ²°κ³Ό
}, μ΄ˆκΈ°κ°’);

πŸ“’ 예제 (1-1) : λ”ν•˜κΈ° (μ΄ˆκΈ°κ°’ X)

const list = [1, 2, 3, 4, 5];
const result = list.reduce((acc, cur, idx) => {
  console.log(idx, acc, cur);
  return acc + cur;
});

console.log("κ²°κ³Ό: ", result);

// κ²°κ³Ό
1 1 2
2 3 3
3 6 4
4 10 5
κ²°κ³Ό:  15

μ΄ˆκΈ°κ°’μ„ 써주지 μ•ŠμœΌλ©΄ λ°°μ—΄μ˜ μ²«λ²ˆμ§Έκ°’μ„ μ΄ˆκΈ°κ°’μ„ κ°–λŠ”λ‹€!

πŸ“’ 예제 (1-2) : λ”ν•˜κΈ° (μ΄ˆκΈ°κ°’ O)

const list = [1, 2, 3, 4, 5];
const result = list.reduce((acc, cur, idx) => {
  console.log(idx, acc, cur);
  return acc + cur;
}, 0);

console.log("κ²°κ³Ό: ", result);

// κ²°κ³Ό
0 0 1
1 1 2
2 3 3
3 6 4
4 10 5
κ²°κ³Ό:  15

πŸ“’ 예제 (2-1) : λ°°μ—΄ -> 객체 (1)

뿐만 μ•„λ‹ˆλΌ reduce()λŠ” 배열을 객체둜 λ³€ν™˜ν•˜λŠ”λ°λ„ μ‚¬μš©ν•  수 μžˆλ‹€.
idxλ₯Ό 킀값을 κ°–λŠ” 객체이닀.

const names = ["κΉ€", "이", "λ°•", "μ •", "졜"];
const result = names.reduce((acc, cur, idx) => {
  acc[idx] = cur;
  return acc;
}, {});
console.log(result);
// { '0': 'κΉ€', '1': '이', '2': 'λ°•', '3': 'μ •', '4': '졜' }

πŸ“’ 예제 (2-2) : λ°°μ—΄ -> 객체 (2)

const names = ["κΉ€", "이", "λ°•", "μ •", "졜", "κΉ€", "졜", "μ •", "이", "이"];
const result = names.reduce((acc, cur) => {
  if (!acc[cur]) {
    acc[cur] = 0;
  }
  acc[cur] += 1;

  return acc;
}, {});
console.log(result);
// { 'κΉ€': 2, '이': 3, 'λ°•': 1, 'μ •': 2, '졜': 2 }

πŸ“’ 예제 (3) : μ€‘λ³΅μ œκ±°

reduce()λŠ” 쀑볡을 μ œκ±°ν•˜λŠ”λ°λ„ μ‚¬μš©ν•  수 μžˆλ‹€.

const names = ["κΉ€", "이", "λ°•", "μ •", "졜", "κΉ€", "졜", "μ •", "이", "이"];
const result = names.reduce((acc, cur) => {
  if (!acc.includes(cur)) {
    acc.push(cur);
  }

  return acc;
}, []);
console.log(result);

// κ²°κ³Ό
[ 'κΉ€', '이', 'λ°•', 'μ •', '졜' ]

0개의 λŒ“κΈ€