Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无筛选条件追加_Javascript_Jquery_D3.js_Svg_Conditional Statements - Fatal编程技术网

Javascript 无筛选条件追加

Javascript 无筛选条件追加,javascript,jquery,d3.js,svg,conditional-statements,Javascript,Jquery,D3.js,Svg,Conditional Statements,我在这个网站上看到了很多问题,询问如何根据元素绑定到的数据将元素附加到选择中。(例如)他们似乎都主张先过滤数据,删除不应该绑定元素的项 我不能这样做,因为过滤掉数据中的项目会在之后更改所有元素的索引,而我的代码依赖于索引。我意识到我可以为每个项目创建一个元组,包含一个基准和它的原始位置,然后安全地过滤,但我想知道是否有更好的方法 如果不先过滤数据,如何根据要绑定的数据附加元素? 我的具体情况是:我有一个2D数组。每个子数组都绑定到一个,对于每个子数组中的每个元素,都会计算并绘制一个。的转换取决

我在这个网站上看到了很多问题,询问如何根据元素绑定到的数据将元素附加到选择中。(例如)他们似乎都主张先过滤数据,删除不应该绑定元素的项

我不能这样做,因为过滤掉数据中的项目会在之后更改所有元素的索引,而我的代码依赖于索引。我意识到我可以为每个项目创建一个元组,包含一个基准和它的原始位置,然后安全地过滤,但我想知道是否有更好的方法

如果不先过滤数据,如何根据要绑定的数据附加元素?


我的具体情况是:我有一个2D数组。每个子数组都绑定到一个
,对于每个子数组中的每个元素,都会计算并绘制一个
转换取决于子数组中元素的索引

对于任何给定子数组中的某些元素,我不希望绘制
。我意识到我可以在不附加
的情况下实现这一点(例如,通过使
完全透明),但我正在尝试减少层次结构中的元素数量

目前,我将所有数据绑定到一个
,然后根据数据筛选并删除某些
。这似乎不是特别有效,但是…

正如我在我的文章中所说,一种可能的解决方案是保留两个数组,一个用于附加元素(过滤后的一个),另一个用于引用它们的索引(原始的一个)。这种方法是密集型的(关于处理器资源)?这取决于您的实际代码和案例。有时,一个性能似乎较差的代码会出乎意料地比一个应该更快的代码表现得更好(例如,添加元素并在以后删除它们……浏览器通常比操作实际的DOM元素更快地操作数组和对象)

无论如何,这里还有另一种方法:创建新的过滤数据,引用原始数据中每个元素的索引

例如,在以下代码段中,我有以下数据集:

var originalData = [16, 18, 4, 17, 12, 2, 15, 13, 8, 19, 17, 3, 8]; 
我们将制作一个过滤数组,只保留小于10的值。但是,在筛选之前,我们将创建一个保存值和原始索引的对象:

var filteredData = originalData.map((d, i) => ({
    value: d,
    index: i
})).filter(e => e.value < 10);
。作为控制台包装{最大高度:20%!重要;}


您可以在添加
.filter().remove()
后删除路径。有兴趣了解是否有更好的方法。更简单的解决方案是保留原始阵列和过滤阵列,使用过滤后的数组将数据和原始数组绑定到
转换
@GerardoFurtado,但这需要在原始数组中为过滤后的数组中绑定的每个元素找到相应的元素,听起来很密集?@DWal这就是我现在要做的。(应该在问题上加上这一点)。@Brandon说得很好,但我的浏览器经常试图渲染超过100万个元素,这使得测试变得困难,因此这是一个紧迫的问题。