πŸ“•[μ±…] 쏙쏙 λ“€μ–΄μ˜€λŠ” ν•¨μˆ˜ν˜• μ½”λ”© - 31,32

rivolt0421Β·2023λ…„ 4μ›” 25일
0

πŸ“•μ±…

λͺ©λ‘ 보기
18/26

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;
}
  1. 암묡적 인자 λ“œλŸ¬λ‚΄κΈ° (μ½”λ“œμ˜ λƒ„μƒˆ)
/// After expressing argument

function incrementField(item, field) {
  var value = item[field];
  var newValue = value + 1;
  var newItem = objectSet(item, field, newValue);
  return newItem;
}
  1. ν•¨μˆ˜ 본문을 콜백으둜 λ°”κΎΈκΈ°
/// Extracted

function incrementField(item, field) {
  return updateField(item, field, function(value) {
  return value + 1;
  });
}
  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()둜 κ΅μ²΄ν•˜κΈ° λ¦¬νŒ©ν„°λ§μ„ ν•΄λ³΄μž.

profile
I think I think too much.

0개의 λŒ“κΈ€