const map = (f, iter) => {
let res = [];
for (const a of iter) {
res.push(f(a));// μΆμν(f ν¨μμ μ΄λ€κ°μ μμ§ν κ²μΈμ§ μμνλ€)
}
return res;
};ν¨μν νλ‘κ·Έλλ°μΌλ‘ ꡬνν map ν¨μλ
- 보쑰ν¨μ(λ§€κ°λ³μ)λ₯Ό ν΅ν΄ μ΄ν°λ¬λΈ κ° μ€ νΉμ κ°μ μμ§νκ² λ€κ³ μ λ¬
- mapν¨μλ κ³ μ°¨ν¨μμ΄λ€.
- mapν¨μλ μ΄ν°λ¬λΈ νλ‘ν μ½μ λ°λ₯΄κ³ μκΈ° λλ¬Έμ λ€νμ±μ΄ λλ€ (μ΄ν°λ¬λΈ νλ‘ν μ½μ μ€μνλ ν¨μλ€μ λ€ μ¬μ©ν μ μμ)
const products = [
{name: 'λ°νν°', price: 15000},
{name: 'κΈ΄νν°', price: 20000},
{name: 'νΈλν°μΌμ΄μ€', price: 15000},
{name: 'νλν°', price: 30000},
{name: 'λ°μ§', price: 25000}
];
const filter = (f, iter) => {
let res = [];
for (const a of iter) {
// ν¨μλ₯Ό μΈμλ‘ λ°μμ μ΄λ€ 쑰건μΌλ νΈμ¬ν κ²μΈμ§
// 보쑰ν¨μμκ² μμμνλ€. (쑰건μ μ μ ν¨μλ₯Ό μΈμλ‘ λ³΄λ΄μΌν¨)
if (f(a)) res.push(a);// 쑰건μ λ°λΌ νν°
}
return res;//λΆμ ν¨κ³Όλ‘ μΆλ ₯μ νλ κ²μ΄ μλλΌ ν¨μμ λ¦¬ν΄ κ°μΌλ‘ μΆλ ₯
};νν°λ νΉμ λ°μ΄ν°λ§ κ±Έλ¬λ΄κ³ μΆμλ, 쑰건μ κ±Έμ΄ κ±Έλ¬λ΄λ ν¨μμ΄λ€.
const reduce = (f, acc, iter) => {// 보쑰ν¨μ, λμ μμκ°, μ΄ν°λ μ΄ν°
if (!iter) {
/* μ΄ν°κ° μμ κ²½μ°μ accκ° μ΄ν°λ μ΄ν°μΌ κ²μ΄λ€.
accμ μ¬λ³Ό μ΄ν°λ μ΄ν°λ₯Ό μ€νν΄μ μ΄ν°λ¬λΈ κ°μ μ΄ν°λ μ΄ν°λ‘ μμ ν λ³νν¨. */
iter = acc[Symbol.iterator]();
acc = iter.next().value;// acc κ°μ μ΄ μ΄ν°λ μ΄ν° μμ μλ 첫 λ²μ§Έ κ°μΌλ‘ ν΄μ€μΌ λλκΉ μ΄ν°λ μ΄ν° valueλ₯Ό λ£μ΄μ€.
}
for (const a of iter) {
acc = f(acc, a);
}
return acc;
};- reduceλ κ°μ μΆκ²©νλ ν¨μμ΄λ€. (μ΄ν°λ¬λΈ κ°μ νλμ κ°μΌλ‘ μΆκ²©ν΄ λκ°λ ν¨μ)
- 보쑰ν¨μλ₯Ό ν΅ν΄μ μ΄λ»κ² μΆκ²©ν μ§λ₯Ό μμνλ€.