V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
WenJimmy
V2EX  ›  问与答

问个 js 的问题,当删除一个点时,如何查找到所有与之相关联的节点与连接信息并删除

  •  
  •   WenJimmy · 2017-05-26 10:18:11 +08:00 · 1014 次点击
    这是一个创建于 2540 天前的主题,其中的信息可能已经有所发展或是发生改变。
    var nodes = [
        {id: 1001, label: "A"},
        {id: 1002, label: "B"},
        {id: 1003, label: "C"},
        {id: 1004, label: "D"},
        {id: 1005, label: "E"},
        {id: 1006, label: "F"},
        {id: 1007, label: "G"},
        {id: 1008, label: "H"},
        {id: 1009, label: "I"}
    ];
    var edges = [
        {from:1002,to:1001,id:"10021001"},//B>A
        {from:1003,to:1002,id:"10031002"},//C>B
        {from:1004,to:1003,id:"10021001"},//D>C
        {from:1005,to:1003,id:"10021001"},//E>C
        {from:1006,to:1002,id:"10021001"},//F>B
        {from:1007,to:1004,id:"10021001"},//G>D
        {from:1008,to:1007,id:"10021001"},//H>G
        {from:1009,to:1007,id:"10021001"} //I>G
    ]
    
    graph LR
    B-->A
    C-->B
    F-->B
    D-->C
    E-->C
    G-->D
    H-->G
    I-->G
    

    当删除 D 时,G、H、I 及连接线都要清除,数据是这样的

    var nodes = [
        {id: 1001, label: "A"},
        {id: 1002, label: "B"},
        {id: 1003, label: "C"},
        {id: 1005, label: "E"},
        {id: 1006, label: "F"}
    ];
    var edges = [
        {from:1002,to:1001,id:"10021001"},//B>A
        {from:1003,to:1002,id:"10031002"},//C>B
        {from:1005,to:1003,id:"10021001"},//E>C
        {from:1006,to:1002,id:"10021001"}//F>B
    ]
    
    graph LR
    B-->A
    C-->B
    F-->B
    E-->C
    

    第 1 条附言  ·  2017-05-26 11:25:08 +08:00
    已经解决,谢谢大家
    6 条回复    2017-05-26 11:24:55 +08:00
    XiaoxiaoPu
        1
    XiaoxiaoPu  
       2017-05-26 10:30:13 +08:00 via iPhone   ❤️ 1
    遍历图,找出 D 的前驱和后继,删除包含 D 的边,新建从 D 的前驱到 D 的后继的边
    yalanaika
        2
    yalanaika  
       2017-05-26 10:30:18 +08:00
    写个递归
    WenJimmy
        3
    WenJimmy  
    OP
       2017-05-26 10:30:49 +08:00
    id 忘记改了,是 from 到 to 的 id 拼接
    Exin
        4
    Exin  
       2017-05-26 10:31:18 +08:00 via iPhone   ❤️ 1
    将 edge 数据整合到 nodes 中,令每个 node 中包含连接到它的点的数据(不能修改 nodes 数组的话另起一个哈希表 /Map 也是可以的)

    删除的时候递归一下就行了
    WenJimmy
        5
    WenJimmy  
    OP
       2017-05-26 11:23:45 +08:00
    @XiaoxiaoPu #1 太高深了,看不懂
    WenJimmy
        6
    WenJimmy  
    OP
       2017-05-26 11:24:55 +08:00
    @Exin #4 一楼的看不懂,不是理科生,用你的思路,已经解决了,谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   992 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:45 · PVG 05:45 · LAX 14:45 · JFK 17:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.