为什么我的数组从产品 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