347p ~ 370p
π reduce()
λ κ°μ μμ½νκΈ°λ νμ§λ§, κ°μ λ§λ€ μλ μλ€.
μ μ κ° μ₯λ°κ΅¬λλ₯Ό μμ΄λ²λ Έμ§λ§ μ₯λ°κ΅¬λμ μΆκ°ν μ νμ λͺ¨λ λ°°μ΄λ‘ λ‘κΉ
νκ³ μμμ λ,
reduce()
λ₯Ό νμ©ν΄ μλμ κ°μ΄ μ₯λ°κ΅¬λλ₯Ό λ€μ λ§λ€ μλ μκ³ ,
var itemsAdded = ["shirt", "shoes", "shirt", "socks", "...."];
var shoppingCart = reduce(itemsAdded, {}, addOne);
function addOne(cart, item) {
if(!cart[item])
return add_item(cart, {name: item, quantity: 1, price: priceLookup(item)});
else {
var quantity = cart[item].quantity;
return setFieldByName(cart, item, 'quantity', quantity + 1)
}
}
μλμ κ°μ΄ ꡬ체μ μΈ λμλ μΆκ°ν΄ λ³Ό μ μλ€.
var itemOps = [['add', "shirt"],
['add', "shoes"],
['remove', "shirt"],
['add', "socks"],
['remove', "hat"],
];
var shoppingCart = reduce(itemOps, {}, function(cart, itemOp) {
var op = itemOp[0];
var item = itemOp[1];
if(op === 'add') return addOne(cart, item);
if(op === 'remove') return removeOne(cart, item);
});
function removeOne(cart, item) {
if(!cart[item])
return cart;
else {
var quantity = cart[item].quantity;
if(quantity === 1)
return remove_item_by_name(cart, item);
else
return setFieldByName(cart, item, 'quantity', quantity - 1)
}
}
μ΄λ κ² λ°μ΄ν°λ₯Ό μΈμμ²λΌ νμ©νμ¬ μ½λλ₯Ό μμ±ν μλ μλ€. μ μ©νλ€.
π κ°μ²΄λ₯Ό λ€λ£¨κΈ° μν κ³ μ°¨ν¨μ : update()
μ΄μ κΉμ§μ map()
, filter()
, reduce()
λ λ°°μ΄μ λ€λ£¨λ κ³ μ°¨ν¨μ.
κ°μ²΄λ₯Ό λ€λ£¨λ ν¨μλ₯Ό 리ν©ν λ§ ν΄λ³΄λ©΄μ update()
λ₯Ό λμΆν΄λ³΄μ.
// μλ μ½λ
function incrementSize(item) {
var size = item['size'];
var newSize = size + 1;
var newItem = objectSet(item, 'size', newSize);
return newItem;
}
/// After expressing argument
function incrementField(item, field) {
var value = item[field];
var newValue = value + 1;
var newItem = objectSet(item, field, newValue);
return newItem;
}
/// Extracted
function incrementField(item, field) {
return updateField(item, field, function(value) {
return value + 1;
});
}
function updateField(item, field, modify) {
var value = item[field];
var newValue = modify(value);
var newItem = objectSet(item, field, newValue);
return newItem;
}
// μ’ λ μΌλ°μ μΈ ν¨μ μκ·Έλμ²λ‘ λ³κ²½
/// Called update()
function update(object, key, modify) {
var value = object[key];
var newValue = modify(value);
var newObject = objectSet(object, key, newValue);
return newObject;
}
π ν¨μν λꡬ update()
function update(object, key, modify) {
var value = object[key];
var newValue = modify(value);
var newObject = objectSet(object, key, newValue);
return newObject;
}
κ°μ²΄μ νλμ ν€μ νλμ κ°μ λ³κ²½νλ€. like μΈκ³Ό μμ
{
key1: X1,
key2: Y1,
key3: Z1,
}
β¬οΈ
modifyY()
β¬οΈ
{
key1: X1,
key2: Y2, // here
key3: Z1,
}
λ€μ μκ°μ update()
λ₯Ό νμ©ν΄μ,
μ‘°ννκ³ λ³κ²½νκ³ μ€μ νλ κ²μ update()
λ‘ κ΅μ²΄νκΈ° 리ν©ν°λ§μ ν΄λ³΄μ.