我有这样的数组:
const data = [
{
id: '1',
Products:[{
ProductID: '1',
},
{
ProductID: '2',
},,
{
ProductID: '3',
}]
},
{
id: '2',
Products:[{
ProductID: '1',
}]
}
]
我想删除这样的项目:
我发送 id 即数据 id 和产品,如下所示:
dispatch({
type: "delete",
payload: { id, products },
});
<块引用>
例如: id : 1 products : [{ ProductID: '1'},{ ProductID: '2'}]
因此此方法将删除 id == 1 的数据项和发送的对象
我试过了:
return {
...state,
data: state.data.map((content, i) =>
content.id === action.payload.id
? {
...content,
Products: content.Products.filter(
(item) => {
return action.payload.products.map((product) => {
product.id != item.id;
});
}
),
}
: content
),
};
答案 0 :(得分:0)
试试这个。
return {
...state,
data: state.data.map((content, i) =>
content.id === action.payload.id ?
{
...content,
Products: content.Products.filter(
item => action.payload.products.find(product => product.id != item.id);
),
} :
content),
};
答案 1 :(得分:0)
根据评论,您可以像这样从子对象中过滤产品,
return {
...state,
data: state.data.map((content, i) => {
if (content.id != action.payload.id) {
return content;
} else {
return {
id: content.id,
Products: content.Products.filter(i => {
if (!action.payload.products.find(p => p.ProductId == i.ProductId) return i)
})
}
}
}
};
在这里试试这个代码,
const data = [
{
id: "1",
Products: [
{
ProductID: "1",
},
{
ProductID: "2",
},
{
ProductID: "3",
},
],
},
{
id: "2",
Products: [
{
ProductID: "1",
},
],
},
]
function deleteRecord(id, products) {
return data.map((item) => {
if (item.id != id) {
return item
} else {
return {
id: item.id,
Products: item.Products.filter((i) => {
if (!products.find((p) => p.ProductID == i.ProductID)) return i
}),
}
}
})
}
console.log(JSON.stringify(deleteRecord("1", [{ ProductID: "1" }, { ProductID: "2" }])))