如何通过某些规则从redux状态删除某些项目

时间:2019-08-18 19:06:53

标签: javascript reactjs redux

如果对象中的某个ID与有效负载中的ID相同,我想删除对象数组中的项。

我的代码:

case "MINUS_PRODUCT_FROM_CART": {
      const arr = state.cart.forEach((item, i) => {
        if (item[i].id === payload.id) {
          arr.splice(i, 1);
        }
      });
      return {
        ...state,
        cart: arr,
      };
    }

我的有效负载外观:

[
{title: "Product 1", price: "128", id: "15"},
{title: "Product 2", price: "9", id: "26"},
{title: "Product 2", price: "9", id: "26"}
]

如果有效载荷ID === 26,我只想删除具有此ID的一个对象

谢谢!

2 个答案:

答案 0 :(得分:1)

const arr = state.cart.filter((item, i) => {
      return item.id !== action.payload.id;
     });
 return {
        ...state,
        cart: arr,
      };

答案 1 :(得分:1)

IMO,您可以编写得更整洁,而无需声明任何其他变量:

return {
  ...state,
  cart: state.cart.filter(item => item.id !== action.payload.id),
};

再次查看您的问题后,我意识到您只想删除第一个问题。我们仍然可以在此处使用过滤器,只需添加一个检查:

let removed = false;

return {
  ...state,
  cart: state.cart.filter(item => {
    if (!removed && item.id !== action.payload.id) {
      removed = true;
      return true;
    }
    return false;
  }),
};