跳转至

数据筛选

问题1

  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的一些特性如filtersome方法来进行筛选。下面是一个实现这一功能的方法:

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

这段代码中,首先使用filtersome方法找到没有在edges数组中作为parentIdnodes。然后遍历edges数组,并对每个边检查其childId是否在之前找出的没有parentIdnodes中。如果是,就给这个边添加一个isDelete: true属性。最后,打印出结果。