通过id javascript删除数组中的对象
我有两个这样的数组:通过id javascript删除数组中的对象,javascript,arrays,reactjs,object,Javascript,Arrays,Reactjs,Object,我有两个这样的数组: const data = [ { createOn: "2021-02-06T18:03", data: [ {id: "1612634593915", createOn: "2021-02-06T18:03:13.915"}, {id: "1612634622462", createOn: "20
const data = [
{
createOn: "2021-02-06T18:03",
data: [
{id: "1612634593915", createOn: "2021-02-06T18:03:13.915"},
{id: "1612634622462", createOn: "2021-02-06T18:03:42.462"},
{id: "1612634584081", createOn: "2021-02-06T18:03:04.081"},
]
},
{
createOn: "2021-02-06T18:02",
data: [
{id: "1612634576145", createOn: "2021-02-06T18:02:56.145"},
{id: "1612634557111", createOn: "2021-02-06T18:02:37.110"}
]
}
]
const listId = ['1612634622462', '1612634557111'];
然后我尝试在listId
const remove = data.map(re => {
re.data.filter(item => {
return !listId.includes(item.id);
})
});
但是当我注销它时,我得到了[未定义,未定义]
我希望数组在删除后像这样返回:
const data = [
{
createOn: "2021-02-06T18:03",
data: [
{id: "1612634593915", createOn: "2021-02-06T18:03:13.915"},
{id: "1612634584081", createOn: "2021-02-06T18:03:04.081"},
]
},
{
createOn: "2021-02-06T18:02",
data: [
{id: "1612634576145", createOn: "2021-02-06T18:02:56.145"}
]
}
]
你能帮我吗。谢谢:)您最初的问题是内部的
map()
函数没有为数据数组中的每个对象返回值。这就是为什么两次迭代都返回undefined
。
另外-如果您filter()
数组,则必须将其重新分配给自身,以仅保留已过滤的元素
data.forEach(re => {
re.data = re.data.filter(item => {
return !listId.includes(item.id);
})
});
您应该从.map()
返回结果:
const数据=[
{
创建时间:“2021-02-06T18:03”,
数据:[
{id:“1612634593915”,createOn:“2021-02-06T18:03:13.915”},
{id:“1612634622462”,createOn:“2021-02-06T18:03:42.462”},
{id:“1612634584081”,createOn:“2021-02-06T18:03:04.081”},
]
},
{
创建时间:“2021-02-06T18:02”,
数据:[
{id:“1612634576145”,createOn:“2021-02-06T18:02:56.145”},
{id:“1612634557111”,createOn:“2021-02-06T18:02:37.110”}
]
}
]
const listId=[1612634622462','1612634557111'];
const remove=data.map(re=>{
re.data=re.data.filter(项=>{
return!listId.includes(item.id);
});
return re;//返回这里
});
控制台日志(删除)代码>当然不是最好的解决方案,但我会循环遍历每个数据对象,并为每个listId对象过滤数据数组。就这样,
data.forEach(element => {
listId.forEach(removeId => {
element.data = element.data.filter(e.id => e.id !== removeId);
});
});
const数据=[
{
创建时间:“2021-02-06T18:03”,
数据:[
{id:“1612634593915”,createOn:“2021-02-06T18:03:13.915”},
{id:“1612634622462”,createOn:“2021-02-06T18:03:42.462”},
{id:“1612634584081”,createOn:“2021-02-06T18:03:04.081”},
]
},
{
创建时间:“2021-02-06T18:02”,
数据:[
{id:“1612634576145”,createOn:“2021-02-06T18:02:56.145”},
{id:“1612634557111”,createOn:“2021-02-06T18:02:37.110”}
]
}
]
const listId=[1612634622462','1612634557111'];
const newData=data.map(项=>{
item.data=item.data.filter(item=>!listId.includes(item.id))
退货项目
})
console.log(newData)
不起作用。你需要检查e.id,而不是e本身。由于数据数组的每个元素都是一个对象,你完全正确,没有看到这一点。有时,如果已经有1-2个好方法,我就不需要发布大量的答案。。如果答案基本相同,对社区有什么好处?!是的,我还知道一个信息。我只是修复了我的过滤器函数来运行它。非常感谢。