首页 > 解决方案 > 从对象数组中过滤出对象数组

问题描述

我有以下数据

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' }]

还有我的数据。

标签: javascriptarraysreactjs

解决方案


您需要改用它

let myArrayFiltered = initialData.filter((el) => {
  return datatoRemove.every((f) => {
    return f.email!= el.email
  });
});

推荐阅读