Что было бы лучшим способом хранения этих выборов?
Ну, это слишком «мнение основано» на 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
будет иметь новый пустой массив. Таким образом, вам придется изменить его в своих целях.
Очень элегантное решение, прекрасно работает для того, что мне нужно. Спасибо! – Sekoul