Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过id javascript删除数组中的对象_Javascript_Arrays_Reactjs_Object - Fatal编程技术网

通过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个好方法,我就不需要发布大量的答案。。如果答案基本相同,对社区有什么好处?!是的,我还知道一个信息。我只是修复了我的过滤器函数来运行它。非常感谢。