在 D3.js 中的更新阶段之前检查数据的有效性

温特

我有每 10 秒更新一次的数据,我想在进行更新之前检查所有数据是否有效。我目前间歇性地收到错误数据,这些数据在其中一个值中显示为负数。如果其中一个对象具有负值,那么我不信任整个集合并且不想更新任何元素。

理想情况下,我不想更新某些项目,然后在出现不正确的值时保释,而是在更新任何内容之前确定整个集合是否良好

我不确定 d3 如何管理这个,但我已经尝试过这个,它似乎有效。但它似乎并不特别符合 D3 的优雅,所以我认为可能有一种正确和更好的方法来做到这一点。但也许不是?!

var dataValid = true;
abcItems.each(function (d, i) {
    if (0 > dd.Number1 - dd.Number2) dataValid = false;
});
if (dataValid) {
    abcItems.each(function (d, i) {
        // updating elements here
    });
} else {
    console.log("negative value occurred");
}

有没有更好的方法来通过 D3 来管理这个?

多一点上下文:

数据(通过 RESTful API 提供的 JSON)和可视化(条形图)每 10 秒更新一次。API 中的故障最多每小时左右导致数据不正确(有时不会整天发生)。故障的影响是所有条形都发生了巨大变化,而每次迭代时数据应该只改变一个或两个。在 10 秒后的下一次数据提取中,数据很好,可视化效果很好。

数据本身总是“格式良好”的,只是提供的值不正确。因此,即使在故障期间,将数据绑定到元素也是安全的。

我想要做的是,如果数据包含这些负值之一,则跳过整个迭代和更新阶段。

或许还值得注意的是,数据中的项目总是相同的,也就是说,唯一发生的“进入”阶段是在页面加载时,并且没有退出的项目(尽管我确实包含了这些操作以捕获任何意外数据波动)。不过,这些项目的值确实会发生变化。

rioV8

查看您的代码,您似乎已经将数据集绑定到您的 DOM 元素abcItems.each(...)

当数据无效时,为什么不退出更新功能。

d3.json("bar-tooltip.json", function(dataset) {

    if (!dataset.every(d => d.Number2 <= d.Number1)) return;

    // do the update of the graph

    });

该示例假设您从d3.json()每个更新间隔调用的函数调用,但您可以使用不同的更新方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章