javascript - 从对象数组中过滤出对象数组
问题描述
我有以下数据
const[myData,setMyData]=React.useState([])
React.useEffect(()=>{
let initialData=[{ email: 'user1@mail.com', date: '22-03-2020' },
{ email: 'user2@mail.com', date: '22-03-2021' },
{ email: 'user3@mail.com', date: '22-03-2021' }]
setMyData(initialData)
},[])
此数据显示在带有复选框的表中,每次按下按钮时都会调用此函数(在选择行之后)
function add(datatoRemove ){
alert("datatoRemove "+JSON.stringify(datatoRemove ) )
let myArrayFiltered = myData.filter((el) => {
return datatoRemove .some((f) => {
return f.email!== el.email
});
});
alert("filtered"+JSON.stringify(myArrayFiltered ) )
setMyData( [...myArrayFiltered ])
}
问题是,通过一个选择,“myArrayFiltered”返回其他 2 行并且状态正确更新,但是如果我选择两个或所有行,则没有任何变化,并且 myArrayFiltered 具有所有 3 个元素。我在这里想念什么?
最终目标是:
可能的情况1: 如果
datatoRemove = [{ email: 'user1@mail.com', date: '22-03-2020' },
{ email: 'user2@mail.com', date: '22-03-2021' },
{ email: 'user3@mail.com', date: '22-03-2021' }]
然后
myArrayFiltered=[]
还有myData= []
可能的情况2:
if datatoRemove = [ { email: 'user2@mail.com', date: '22-03-2021' },{
email: 'user3@mail.com', date: '22-03-2021' }]
然后
myArrayFiltered= [{ email: 'user1@mail.com', date: '22-03-2020' }]
还有我的数据。
解决方案
您需要改用它
let myArrayFiltered = initialData.filter((el) => {
return datatoRemove.every((f) => {
return f.email!= el.email
});
});