303p ~ 326p
π
reduce()
: λ°°μ΄μ νλμ κ°μΌλ‘ "reduce"
// origin
function countAllPurchases(customers) {
var total = 0;
forEach(customers, function(cutomer) {
total = total + customer.purchases.length;
}
);
};
});
return total;
}
// with reduce
function countAllPurchases(customers) {
return reduce (customers, 0, function(total, customer) {
return total + customer.purchases.length;
}
);
}
function reduce(array, init, f) {
var accum = init;
forEach(array, function(elem) {
accum = f(accum, elem);
});
return accum;
}
π reduce μ΄κΈ°κ° μ£Όμν μ
forEach
κ° μ무κ²λ νμ§ μμΌλ―λ‘ μ΄κΈ°κ°μ΄ κ·Έλλ‘ λ¦¬ν΄λ κ².π μΈ κ°μ§ ν¨μν λꡬ λΉκ΅
map
: μ΄λ€ λ°°μ΄μ λͺ¨λ νλͺ©μ ν¨μλ₯Ό μ μ©ν΄, μλ‘μ΄ λ°°μ΄λ‘ λ°κΎΌλ€.
filter
: μ΄λ€ λ°°μ΄μ νμ μ§ν©μ μ νν΄ μλ‘μ΄ λ°°μ΄λ‘ λ§λ λ€.
reduce
: μ΄λ€ λ°°μ΄μ νλͺ©μ μ‘°ν©ν΄ μ΅μ’
κ°μ λ§λλλ€. λ°μ΄ν° μμ½ or μνμ€λ₯Ό νλμ κ°μΌλ‘ λ§λ€ λ μ£Όλ‘ μ¬μ©.
π ν¨μν λꡬ 체μΈ
: λ¨κ³λ€μ μ‘°ν©ν΄ νλμ μΏΌλ¦¬λ‘ λ§λλ κ². μ΄ κ³Όμ μμ ν¨μν λꡬλ₯Ό μ¬μ©νλ κ².
π μ²΄μΈ λͺ ννκ² λ§λ€κΈ° β‘οΈ "μ½λ°±μ μ΄λ¦ λΆμ΄κΈ°" λ₯Ό μ νΈ.
// μλ μ½λ
function biggestPurchasesBestCustomers(customers) {
var bestCustomers = filter(customers, function(customer) { // 1λ¨κ³
return customer.purchases.length >= 3;
});
var biggestPurchases = map(bestCustomers, function(customer) { // 2λ¨κ³
return maxKey(customer.purchases, {total: 0}, function(purchase) {
return purchase.total;
});
});
return biggestPurchases;
}
// 1. λ¨κ³μ μ΄λ¦ λΆμ΄κΈ°
function biggestPurchasesBestCustomers(customers) {
var bestCustomers = selectBestCustomers(customers); // 1λ¨κ³
var biggestPurchases = getBiggestPurchases(bestCustomers); // 2λ¨κ³
return biggestPurchases;
}
function selectBestCustomers(customers) {
return filter(customers, function(customer) { // κ·Έλλ‘ λΆλ¦¬
return customer.purchases.length >= 3;
});
}
function getBiggestPurchases(customers) { // κ·Έλλ‘ λΆλ¦¬
return map(customers, getBiggestPurchase);
}
function getBiggestPurchase(customer) { // κ·Έλλ‘ λΆλ¦¬
return maxKey(customer.purchases, {total: 0}, function(purchase) { // μ€μ²©
return purchase.total; // μ€μ²©
});
}
// 2. μ½λ°±μ μ΄λ¦ λΆμ΄κΈ°
/// extracted and named callbacks
function biggestPurchasesBestCustomers(customers) {
var bestCustomers = filter(customers, isGoodCustomer); // μ΄λ¦λΆμΈ μ½λ°± μ λ¬
var biggestPurchases = map(bestCustomers, getBiggestPurchase); // μ΄λ¦λΆμΈ μ½λ°± μ λ¬
return biggestPurchases;
}
function isGoodCustomer(customer) {
return customer.purchases.length >= 3;
}
function getBiggestPurchase(customer) {
return maxKey(customer.purchases, {total: 0}, getPurchaseTotal);
}
function getPurchaseTotal(purchase) {
return purchase.total;
}
reduceλ§μΌλ‘ mapκ³Ό filterλ₯Ό λ§λ€ μ μλ€λ κ±Έ μμλμ? μ¬λ°λ΅λλ€ π