数据筛选
问题1
- 返回下面nodes中的id没有在edges中parentId的数据,es6也行
var nodes = [
{
"id": "2e20fbfd20a44510b560f069a174f107",
"taskName": "组件建模",
},
{
"id": "b6ca57e22f154bb08d9908aa97dc8138",
"taskName": "旧组件计算",
},
{
"id": "d8a7b8d52527469a804e15247e20dbbc",
"taskName": "堆芯建模",
},
{
"id": "f059958a52974bd6b3d53fdd2657bb9b",
"taskName": "堆芯建模2",
},
{
"id": "f17dc1f5b2784435a6e0362920c1e038",
"taskName": "堆芯建模1",
}
],
var edges = [
{
"parentId": "2e20fbfd20a44510b560f069a174f107",
"childId": "b6ca57e22f154bb08d9908aa97dc8138",
"sortTime": 1704761643417
},
{
"parentId": "2e20fbfd20a44510b560f069a174f107",
"childId": "f059958a52974bd6b3d53fdd2657bb9b",
"sortTime": 1704761643492
},
{
"parentId": "f059958a52974bd6b3d53fdd2657bb9b",
"childId": "f17dc1f5b2784435a6e0362920c1e038",
"sortTime": 1705477402354
},
{
"parentId": "b6ca57e22f154bb08d9908aa97dc8138",
"childId": "f17dc1f5b2784435a6e0362920c1e038",
"sortTime": 1705477551640
},
{
"parentId": "d8a7b8d52527469a804e15247e20dbbc",
"childId": "f17dc1f5b2784435a6e0362920c1e038",
"sortTime": 1705477558368
}
]
问题1思路
为了找出nodes
数组中的对象,其id
没有在edges
数组中作为parentId
出现,我们可以使用ES6的一些特性如filter
和some
方法来进行筛选。下面是一个实现这一功能的方法:
const nodesWithoutParent = nodes.filter(node => !edges.some(edge => edge.parentId === node.id)
);
console.log(nodesWithoutParent);
这段代码首先使用filter
方法遍历nodes
数组,并针对每个节点使用some
方法检查edges
数组中是否存在一个边界对象其parentId
等于当前节点的id
。如果不存在,意味着当前节点的id
没有作为任何parentId
出现,所以应该被包含在最终结果中。最后,打印出这些节点。
问题2
找出下面nodes中的id没有在edges中parentId的数据,并在edges中childId为该id的数据加上一条内容为 isDelete: true
var nodes = [
{
"id": "2e20fbfd20a44510b560f069a174f107",
"taskName": "组件建模",
},
{
"id": "b6ca57e22f154bb08d9908aa97dc8138",
"taskName": "旧组件计算",
},
{
"id": "d8a7b8d52527469a804e15247e20dbbc",
"taskName": "堆芯建模",
},
{
"id": "f059958a52974bd6b3d53fdd2657bb9b",
"taskName": "堆芯建模2",
},
{
"id": "f17dc1f5b2784435a6e0362920c1e038",
"taskName": "堆芯建模1",
}
],
var edges = [
{
"parentId": "2e20fbfd20a44510b560f069a174f107",
"childId": "b6ca57e22f154bb08d9908aa97dc8138",
"sortTime": 1704761643417
},
{
"parentId": "2e20fbfd20a44510b560f069a174f107",
"childId": "f059958a52974bd6b3d53fdd2657bb9b",
"sortTime": 1704761643492
},
{
"parentId": "f059958a52974bd6b3d53fdd2657bb9b",
"childId": "f17dc1f5b2784435a6e0362920c1e038",
"sortTime": 1705477402354
},
{
"parentId": "b6ca57e22f154bb08d9908aa97dc8138",
"childId": "f17dc1f5b2784435a6e0362920c1e038",
"sortTime": 1705477551640
},
{
"parentId": "d8a7b8d52527469a804e15247e20dbbc",
"childId": "f17dc1f5b2784435a6e0362920c1e038",
"sortTime": 1705477558368
}
]
问题2思路
为了找到nodes
中的id
没有在edges
中作为parentId
出现的节点,并在edges
中将childId
为这些节点id
的边标记为删除(添加isDelete: true
),你可以使用以下代码:
// 找出所有没有在edges中作为parentId出现的nodes
const nodesWithoutParent = nodes.filter(node =>
!edges.some(edge => edge.parentId === node.id)
);
// 对于找出的这些节点,将edges中对应的childId标记为删除
edges.forEach(edge => {
if (nodesWithoutParent.some(node => node.id === edge.childId)) {
edge.isDelete = true;
}
});
console.log(nodesWithoutParent); // 打印出没有parentId的nodes
console.log(edges); // 打印出更新后的edges,其中部分对象会包含isDelete: true
这段代码中,首先使用filter
和some
方法找到没有在edges
数组中作为parentId
的nodes
。然后遍历edges
数组,并对每个边检查其childId
是否在之前找出的没有parentId
的nodes
中。如果是,就给这个边添加一个isDelete: true
属性。最后,打印出结果。