我根据以下示例启动了一个新的JavaScript项目:http://bl.ocks.org/mbostock/4063570
到目前为止,d3 树状图的所有内容都很棒,除了我的数据可能总是包含重复的叶子(终端节点)。在我的数据中,只有叶子可以包含重复的数据。在 d3 发挥作用之前,所有内部节点(根和叶之间)都是严格不同的。
我可以在节点名称 (d.name) 中添加一些内容以使每个节点完全唯一,但我宁愿"重用"叶节点,并使所有内部节点指向并共享单个叶(如果可能)。
有没有人知道如何做到这一点?
提前非常感谢!德鲁·巴菲尔德
D3 数据联接期望每个 DOM 节点对应于数据数组中的不同元素。 但是,没有什么可以阻止数据数组中的 2 个元素引用同一个基础对象。
它归结为您是否可以使用默认连接键(即数组索引),或者您是否想通过将特定数据元素映射到特定节点来实现数据更新的"对象持久性"感。 要做到这一点,您需要定义一个自定义联接键函数,根据定义,该函数依赖于某种方法来区分数据元素。
就个人而言,我认为如果您正在进行涉及进入/退出/更新的任何数量的数据更新,那么如果每个数据元素都是唯一的并且具有某种可用于识别它的"id"或"key"属性,生活会容易得多。 重用数据元素可能会比它的价值更令人头疼。
您实际上没有提到您试图通过共享数据来实现什么? 这只是节省内存的优化还是有其他原因? 如果只是记忆,我不会打扰。