Javascript 如何根据某些规则从redux状态删除某些项

Javascript 如何根据某些规则从redux状态删除某些项,javascript,reactjs,redux,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,

如果对象中的某个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的对象


谢谢

IMO,您可以更简洁地编写它,而无需声明任何额外变量:

const arr = state.cart.filter((item, i) => {
      return item.id !== action.payload.id;
     });
 return {
        ...state,
        cart: arr,
      };
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;
  }),
};

在我看来,您可以更简洁地编写它,而无需声明任何额外变量:

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;
  }),
};

只需使用过滤器返回数组。你提供的东西看起来不像你的有效载荷,而是你的购物车。您在后面说了
如果有效负载id==26
。只需使用过滤器返回数组即可。你提供的东西看起来不像你的有效载荷,而是你的购物车。你后来说如果有效负载id==26
Array.filter
绝对是这里的方法
Array.filter
绝对是这里的方法