给定大量选择(数万)我想过滤一个或多个匹配给定ID的元素。
对于他们来说,我会使用类似的东西:
var ids = [1, 42, …, 13];
var idsObj = arrayToObject(ids); // { 1: 1, 42: 1, …, 13: 1 }
var filteredSelection = theSelection.filter(function(d) {
return idsObj[d.id];
});
我不喜欢该解决方案的是运行时并不真正依赖于ID的数量。无论是否已找到所有ID,它都会遍历整个选择。
有没有办法手动迭代选择?我已经theSelection.each()
,但似乎没有办法打破迭代。
或者你知道另一种方法吗?
修改 也许我可以使用类似的东西:
for (var i = 0; i < theSelection[0].length; i++) {
// d3.select(theSelection[0][i]).datum().id
};
答案 0 :(得分:0)
好的,我想我已经找到了解决方案。请评论,如果有更好的方法;)
var filteredNodes = [];
for (var i = 0; i < theSelection[0].length; i++) {
var el = theSelection[0][i];
var d = d3.select(el).datum();
if (idsObj[d.id]) {
filteredNodes.push(el);
if (filteredNodes.length == ids.length) {
break;
}
}
}
var filteredSelection = d3.selectAll(filteredNodes);
顺便说一句,是否可以做类似的事情:
var filteredSelection = d3.select();
for (…) {
…
filteredSelection.add(el);
…
}