开发者问题收集

为什么我的数组从产品 ID 中删除所有内容,而我说只有当产品 ID 和尺寸/颜色存在时

2022-06-21
27

我有一个这样的数组:

    "products": Array [
      {
        product_id: '1',
        options: [
          {
            size: 'XS',
            color: 'blue'
          }
        ]
      },
      {
        product_id: '1',
        options: [
          {
            size: 'S',
            color: 'red'
          }
        ]
      }
    ],

因此,我想删除有效载荷与产品 ID、尺寸和颜色相等的项目。

      state.cart = state.cart.filter((el => 
        el.products?.id !== action.payload.id && 
        el.products?.options[0].color !== action.payload.options[0].color && 
        el.products?.options[0].size !== action.payload.options[0].size
        ));

有效载荷是正确的,但他删除了两个对象。那么我做错了什么?

1个回答

链接 && 意味着必须满足所有 3 个条件才能使返回值为真 - id 不能匹配、颜色不能匹配、大小不能匹配。但您的 ID 匹配。请改用 || ,这样单个不匹配的值将返回 true(并将结果包含在最终数组中)。

您还应该使用 product_id ,而不是 id (因为这是数据结构中键的名称)。

您也不应该直接分配给状态。假设这是在 Reducer 内部,并且您只想更新 .cart 属性,您将需要

return {
  ...state,
  cart: state.cart.filter(el =>
    el.products?.product_id !== action.payload.product_id ||
    el.products?.options[0].color !== action.payload.options[0].color ||
    el.products?.options[0].size !== action.payload.options[0].size
  )
};
CertainPerformance
2022-06-21