Javascript自递归循环|在过滤器中查找|在同一数组中循环



我有一个包含对象的数组:

[
{
id:1,
parent:null,
value1:22,
value2:33
},
{
id:2,
parent:1,
value1:0,
value2:0
},
{
id:3,
parent:1,
value1:40,
value2:70
},
{
id:4,
parent:2,
value1:40,
value2:70
},
{
id:5,
parent:null,
value1:40,
value2:70
}
]

我想过滤数组中的所有元素,这些元素的父元素以id的形式存在于同一数组中。例如,id 1和5不应该存在,因为它们的父级为null,而数组中不存在null id。

我试过了-

array.filter( (item: IItem)=>{
item.parent == item.id
});

这不会过滤任何内容。正在获取空输出。我希望输出是除1和5之外的所有元素。

仅限于Array.filter

const data = [
{ id: 1, parent: null, value1: 22, value2: 33 },
{ id: 2, parent: 1, value1: 0, value2: 0 },
{ id: 3, parent: 1, value1: 40, value2: 70 },
{ id: 4, parent: 2, value1: 40, value2: 70 },
{ id: 5, parent: null, value1: 40, value2: 70 },
];
const output = data.filter((node) =>
data.find((item) => node.parent && item.id === node.parent)
);
console.log(output);

filter()和嵌套的find()应该足够了:

const data = [{id:1, parent:null, value1:22, value2:33 }, {id:2, parent:1, value1:0, value2:0 }, {id:3, parent:1, value1:40, value2:70 }, {id:4, parent:2, value1:40, value2:70 }, {id:5, parent:null, value1:40, value2:70 }];
const res = data.filter(d => d.parent !== null && data.find(e => e.id === d.id));
console.log(res);

[
{
"id": 2,
"parent": 1,
"value1": 0,
"value2": 0
},
{
"id": 3,
"parent": 1,
"value1": 40,
"value2": 70
},
{
"id": 4,
"parent": 2,
"value1": 40,
"value2": 70
}
]

试试这个。如果父项为false(null(,则过滤器忽略它。

arr.filter((item) => {
return item.parent;
}),

let arr = [
{
id:1,
parent:null,
value1:22,
value2:33
},
{
id:2,
parent:1,
value1:0,
value2:0
},
{
id:3,
parent:1,
value1:40,
value2:70
},
{
id:4,
parent:2,
value1:40,
value2:70
},
{
id:5,
parent:null,
value1:40,
value2:70
}
]
console.log(arr.filter((item) => {
return item.parent;
}))


const data =[
{id:1, parent:null, value1:22, value2:33 }, 
{id:2, parent:1, value1:0, value2:0 },
{id:3, parent:1, value1:40, value2:70 },
{id:4, parent:2, value1:40, value2:70 },
{id:5, parent:null, value1:40, value2:70 }];
const arr = data.filter(x => x.parent !== null && data.find(y => y.id === x.id));
console.log(arr);

这应该通过创建一个id数组并通过进行过滤来实现

const array =[
{
id:1,
parent:null,
value1:22,
value2:33
},
{
id:2,
parent:1,
value1:0,
value2:0
},
{
id:3,
parent:1,
value1:40,
value2:70
},
{
id:4,
parent:2,
value1:40,
value2:70
},
{
id:5,
parent:null,
value1:40,
value2:70
}]
const ids = []
array.forEach(item => 
{
ids.push(item.id);
}
);
const result = array.filter(el => ids.includes(el.parent));
console.log(result);

最新更新