javascript - 从函数返回修改后的新对象

标签 javascript reactjs redux

从函数修改和返回新对象的最佳做法是什么?

我写了下面的函数:

export const addItemToCart = (currentCart, item) => {
  const { name, ...otherProps } = item;

  //if item exist in the cart
  if (currentCart[name]) {
    currentCart[name]["quantity"]++;
    return currentCart;
  } 
  //if the item does not exist
  else
  {
    currentCart[name] = { ...otherProps };
    currentCart[name]["quantity"] = 1;
    return currentCart;
  }

// the function must return a new modified object on each call
};

显然,硬编码属性“数量”和返回语句肯定可以改进。

如何改进此函数以使其更具可读性?

最佳答案

更多的“可读性”是非常基于意见的,无论哪种方式,你都可以尝试这样的事情:

const currentCart = {
  hello: {
    quantity: 1
  }
};

const addItemToCart = (currentCart, item) => {
  const { name } = item;

  // Short circuit + return the last value
  const quantityPrev = currentCart[name] && currentCart[name].quantity;

  // Or operator on boolean expression
  const quantity = 1 + (quantityPrev || 0);

  // Destructing for shallow copy, dynamic key assign
  return { ...currentCart, [name]: { quantity } };
};

console.log(addItemToCart(currentCart, { name: 'hello' }));
console.log(addItemToCart(currentCart, { name: 'blazer' }));

关于javascript - 从函数返回修改后的新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57956617/

相关文章:

JavaScript:更新 <select> 给定月份输入的天数列表

reactjs - 一起使用 react.useEffect 和 mobx.autorun

javascript - 当到达存储在数据库中的 future 日期、时间时,如何在 Node JS 中触发事件?

javascript - 如何更新或添加到 immutable.js 列表

javascript - 如果我们将 div 放在 p 标签内,Jquery html() 方法不起作用?

javascript - 无法根据值检查单选按钮,需要使用 Javascript/Jquery 进行验证

javascript - 如何在 Javascript 中使用新日期执行条件?

javascript - 文本编辑器的 Redux 架构 : dealing with coupled state

reactjs - TypeScript 和 React-Redux 中的阴影名称

javascript - ASP.Net @Html.TextBox 日期选择器