327p ~ 346p
π μ€νΈλ¦Ό κ²°ν© (stream fusion)
map(), filter(), reduce() 체μΈμ μ΅μ ν νλ κ².
μ΅μ νμΌ λΏμ΄κ³ λ³λͺ©μ΄ λ°μνμ λλ§ μ¬μ©νλ κ²μ΄ μ’λ€.
λλΆλΆμ κ²½μ° μ¬λ¬ λ¨κ³λ₯Ό μ¬μ©νλ κ²μ΄ λ λͺ
ννκ³ μ½κΈ° μ½λ€.
/// Two map() steps in a row
var names = map(customers, getFullName);
var nameLengths = map(names, stringLength);
/// Equivalent as a single map() step
var nameLengths = map(customers, function(customer) {
return stringLength(getFullName(customer));
});
/// Two filter() steps in a row
var goodCustomers = filter(customers, isGoodCustomer);
var withAddresses = filter(goodCustomers, hasAddress);
/// Equivalent as a single filter() step
var withAddresses = filter(customers, function(customer) {
return isGoodCustomer(customer) && hasAddress(customer);
});
/// map() step followed by reduce() step
var purchaseTotals = map(purchases, getPurchaseTotal);
var purchaseSum = reduce(purchaseTotals, 0, plus);
/// Equivalent as a single reduce() step
var purchaseSum = reduce(purchases, 0, function(total, purchase) {
return total + getPurchaseTotal(purchase);
});
π λ°λ³΅λ¬Έμ ν¨μν λκ΅¬λ‘ λ¦¬ν©ν°λ§ νκΈ°
리ν©ν°λ§ ν μ½λ.
λ°°μ΄ νΉμ λΆλΆμ μ°μλ λ°μ΄ν°μΈ window
μ νκ· μ ꡬνκ³ , κ²°κ³Όμ μΆκ°νλ€.
μ΄λ₯Ό λ°°μ΄μ μμλΆν° λκΉμ§ λ°λ³΅.
var answer = [];
var window = 5;
for(var i = 0; i < array.length; i++) {
var sum = 0;
var count = 0;
for(var w = 0; w < window; w++) { // 1
var idx = i + w; // 2
if(idx < array.length) {
sum += array[idx]; // 3
count += 1;
}
}
answer.push(sum/count);
}
Tip 1. λ°μ΄ν°λ₯Ό λ°°μ΄μ λ΄κΈ°
μ£Όμ 1, 2, 3 μ 보면, κ°μ΄ κ³μ λ°λμ§λ§ λ°°μ΄λ‘ λ§λ€μ§λ μκ³ μλ€.
λ°μ΄ν°λ₯Ό λ°°μ΄μ λ£μΌλ©΄ ν¨μν λꡬλ₯Ό μΈ μ μλ€.
μ½λλ₯Ό 보면 λ°λ³΅λ¬Έμ ν΅ν΄μ window
λΌλ λ²μλ₯Ό μΆμμ μΌλ‘ μ¬μ©νλλ°, μ΄λ₯Ό λͺ
μμ μΈ λ°°μ΄λ‘ μΆμΆνλ©΄ ν¨μν λꡬλ₯Ό μΈ μ μκ²λλ€.
/// make subarray
var answer = [];
var window = 5;
for(var i = 0; i < array.length; i++) {
var sum = 0;
var count = 0;
var subarray = array.slice(i, i + window); //here
for(var w = 0; w < subarray.length; w++) {
sum += subarray[w];
count += 1;
}
answer.push(sum/count);
}
Tip 2. ν λ²μ μ 체 λ°°μ΄μ μ‘°μνκΈ°
μμμ λ°μ΄ν°λ₯Ό λ°°μ΄λ‘ λ§λ κ²μ, ν¨μν λꡬλ₯Ό μ΄μ©ν΄ 'ν λ²μ' μ‘°μνλ€.
/// Using average
var answer = [];
var window = 5;
for(var i = 0; i < array.length; i++) {
var subarray = array.slice(i, i + window);
answer.push(average(subarray));
}
κ°μ₯ μμμ for
λ¬Έ μμλ, i
κ°μ΄ κ³μ λ°λλ©΄μ μ¬μ©λκ³ μμ§λ§, λ°°μ΄λ‘ λ§λ€μ΄μ§μ§λ μκ³ μλ€.
μ΄ λν 1) λ°μ΄ν°λ₯Ό λ°°μ΄μ λ£κ³ , 2) ν λ²μ μ‘°μνλλ‘ κ°μ νλ€.
// make range (set of indices)
function range(start, end) {
var ret = [];
for(var i = start; i < end; i++)
ret.push(i);
return ret;
}
var indices = range(0, array.length);
var window = 5;
var answer = map(indices, function(i) {
var subarray = array.slice(i, i + window);
return average(subarray);
});
Tip 3. μμ λ¨κ³λ‘ λλκΈ°
νμ¬ map()
μ λκΈ°λ μ½λ°±μμ λ κ°μ§μ μΌμ νκ³ μλ€.
μ΄λ₯Ό μμ λ¨κ³λ‘ λλμ΄ μμ μ΄ λ λͺ ννκ² λ³΄μ΄λλ‘ νλ€.
/// in two steps
var indices = range(0, array.length);
var window = 5;
var windows = map(indices, function(i) { // make subset
return array.slice(i, i + window);
});
var answer = map(windows, average); // calculate average
π κ²°κ³Ό
λ°°μ΄μ μ΄λνλ©° νκ· κ΅¬νκΈ°
1. μ«μ 리μ€νΈκ° μμ λ κ° μ«μμ λν windowλ₯Ό λ§λλλ€.
2. κ·Έλ¦¬κ³ κ° windowμ νκ· μ ꡬν©λλ€.
π 체μ΄λ ν μμ½
map()
, filter()
, reduce()
λ ν¨μν λꡬμ μ λΆκ° μλλ€. ν¨μλ₯Ό μΆμΆνκ³ μ’μ μ΄λ¦μ λΆμ¬ μ¬μ©νμ!체μ΄λ λλ²κΉ μ μν ν
- λ³μλͺ μ μ§κΈ°.
κ° λ¨κ³μμ μ΄λ€ κ²μ νκ³ μλμ§ μκΈ° μ½κ² μ΄λ¦μ μ μ§μ΄μΌ νλ€.
- μΆλ ₯ν΄λ³΄κΈ°.
μ΅κ³ μ κ·Όλ³Έ λλ²κ·Έ
νμ μ λ°λΌκ° 보기.
μλ°μ€ν¬λ¦½νΈμ²λΌ νμ μ΄ μλ μΈμ΄λ₯Ό μ¬μ©ν΄λ ν¨μν λꡬλ νμ μ΄ μλ€. λ€λ§ μ»΄νμΌ νμμ κ²μ¬νμ§ μμ λΏ.
map()
μ΄ λ¦¬ν΄νλ μλ‘μ΄ λ°°μ΄μλ, μ½λ°±μ΄ 리ν΄νλ νμ μ κ°.reduce()
μ κ²°κ³Όκ°μ νμ μ, μ΄κΈ°κ°μ νμ κ·Έλ¦¬κ³ μ½λ°±μ΄ 리ν΄νλ κ°μ νμ κ³Ό κ°λ€.
리ν©ν λ§ λ λͺ¨μ΅μ 보λ κΉλνκΈ΄ νλ€...