存储这些选择的最佳方式是什么?
嗯,这对 S.O. 来说太“基于意见”了。但是,我将分享一个非常粗略的解决方案,其中不是为每个点创建它所属的集群列表,而是创建一个集群列表及其对应的点。 几乎与您所要求的相反,但您可以轻松修改结果数组(每个选择的点的数组)以创建所需的记录(每个点的选择的数组)。
第一步是在lasso_end之外定义数组:
var clusters = [];
然后,在lasso_end 中,我们得到一个选定点的列表:
var selected = lasso.items().filter(function(d){
return d.selected===true
});
var selectedDots = selected[0].map(d=>d.id);
在这里,我按 ID 进行映射。然后,我们将数组推入clusters:
clusters.push(selectedDots);
用户每选择一些点,cluster 就会变大。所以,第一次,你可以得到这样的东西:
var clusters = [["dot_62","dot_68","dot_87","dot_119"]];
第二次:
var clusters = [["dot_62","dot_68","dot_87","dot_119"],
["dot_53","dot_57","dot_80","dot_81","dot_93"]];
这是一个 plunker,选择你的点并检查控制台:https://plnkr.co/edit/qiZ6bkgZhoSn3XfJW2l7?p=preview
PS:正如我之前所说,这是一个非常粗略的解决方案:如果用户只是单击图表中的任意位置,clusters 将有一个新的空数组。因此,您必须根据自己的目的对其进行修改。