在 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 秒后的下一次数据获取中,数据正常,可视化正确。

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

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

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

查看您的代码,您会发现您已经将数据集绑定到您的 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()每个更新间隔调用的 froma 函数,但您可以使用不同的更新方法。

最新更新