使用scala-js-d3应用更新之前过滤数据

使用scala-js-d3应用更新之前过滤数据,scala,d3.js,scala.js,Scala,D3.js,Scala.js,我经常画一些相当复杂的图表。出于性能原因,我希望在应用转换之前过滤更新集 到目前为止,我的代码如下所示: def showData(a: Drawable): Boolean = // [...] determines if the data point should be visible val selection: Update[Drawable] = d3.select(s"#$parentElement") .selectAll(s".$className

我经常画一些相当复杂的图表。出于性能原因,我希望在应用转换之前过滤更新集

到目前为止,我的代码如下所示:


def showData(a: Drawable): Boolean = // [...] determines if the data point should be visible

val selection: Update[Drawable] =
      d3.select(s"#$parentElement")
        .selectAll(s".$className")
        .data(drawables.toJSArray, (a: Drawable) => a.id.toString)

selection.enter
  .append("g")
   // [...] drawing of the data point

selection
  .attr("display", (a: Drawable)  => if(showData(a)) "block" else "hidden") // (*2)

selection
  .filter((a: Drawable)  => showData(a)) // This is not possible? (*1)
  .transition()
  .duration(600)
  .ease("linear")
  .attr("transform", (a: Drawable) => /* [...] */)

在应用如
(*1)
所示的转换之前,是否有方法过滤要更新的数据?这些数据点中的大多数都是不可见的,因此应用这些转换是没有意义的

非常感谢任何帮助或提示


编辑:
选择
部分期间无法进行过滤,因为这样就不会发生从可见到不可见的更改(请参见
(*2)
)。

对您的代码的建议:
def showData(a:Drawable)=if(a.visible)true否则false
您可以写入
def showData(a:Drawable)是的,当然可以。无论如何,这不是真正的代码,只是我快速编写的代码,以演示我的问题。根据代码,我猜应该在
select
partGood点进行过滤,但不幸的是,我认为这在我的情况下是不可能的(我更新了我的问题)。对代码的建议:
def showData(a:Drawable)=如果(a.visible)true else false
是否可以写入
def showData(a:Drawable)=a.visible
啊,是的,当然。无论如何,这不是真正的代码,只是我很快写的东西,以证明我的问题。仅凭代码,我猜应该在
选择
部分进行过滤。好的一点,但不幸的是,我认为这在我的情况下是不可能的(我更新了我的问题)。