删除中间节点
本示例演示了如何在从链中间删除节点时恢复已删除的边。换句话说,如果我们按顺序连接了三个节点 - a->b->c
- 并且我们删除了中间节点 b
,本示例演示了如何最终得到图形 a->c
。
为了实现这一点,我们需要使用一些部分
- 该
onNodesDelete
回调让我们知道何时删除了节点。 getConnectedEdges
为我们提供了连接到节点的所有边,无论是作为源还是目标。getIncomers
和getOutgoers
为我们提供了连接到节点的节点,作为源或目标。
总而言之,这使我们能够获取连接到已删除节点的所有节点,并将它们重新连接到已删除节点连接到的任何节点。
虽然这个例子不到 20 行代码,但需要消化很多内容。让我们分解其中的一些内容
-
我们的
onNodesDelete
回调使用一个参数调用 -deleted
- 这是一个包含刚刚删除的每个节点的数组。如果您选择单个节点并按删除键,则deleted
将只包含该节点,但如果您进行选择,则该选择中的所有节点都将在deleted
中。 -
我们创建了一个新的边数组 -
remainingEdges
- 它包含流中与我们刚刚删除的节点无关的所有边。 -
我们通过对
incomers
数组进行扁平映射创建另一个边数组。这些是连接到已删除节点作为源的节点。对于这些节点中的每一个,我们创建一个新的边,该边连接到outgoers
数组中的每个节点。这些是连接到已删除节点作为目标的节点。
为了简洁起见,我们在同时重命名绑定的变量时使用对象解构(例如 ({ id: source }) => ...)
解构对象的 id
属性并将其绑定到名为 source
的新变量),但您不需要这样做