我有每 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()
每个更新间隔调用的函数调用,但您可以使用不同的更新方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句