javascript - D3.extent() 抛出 TypeError :值不可迭代
问题描述
在过去的三个小时里,我一直在为此挠头,如果有人可以帮忙,请帮忙。我不太擅长将 D3 与 React 结合使用。
所以,基本上,我在后端 Flask 应用程序中运行了一个异常检测器算法,它以字典的形式返回值(然后通过 json.dumps() 转换为 json 对象),进一步,使用 D3 在我的 React 应用程序上绘制.
最初,我认为问题出在我的数据库上,因为该应用程序在代码沙盒和我之前的所有版本中都能完美运行。
有人告诉我,A_Epoch(3) 和 Time_Epoch(151) 的不同数据点可能存在问题。解决了也无济于事。
这是代码的样子:
const timeDomain = d3.extent(data, d=>(d.Time_Epoch*1000));
const bytesReadDomain = d3.extent(data, (d) => d.Bytes_Read);
const bytesWriteDomain = d3.extent(data, (d) => d.Bytes_Write);
const bytesSentDomain = d3.extent(data, (d) => d.Bytes_Sent);
const bytesRecvDomain = d3.extent(data, (d) => d.Bytes_Recv);
这部分是抛出错误。
解决方案
data
是一个对象,而不是一个数组。
d3.extent
期望一个数组作为第一个参数,第二个函数d3.extent
是一个可选的键函数。该函数对每个数组元素执行。因此,例如,如果您有一个复杂对象数组,每个对象都有一个id
,您可以使用以下内容:
const data = [{
id: 1,
}, {
id: 2,
}];
console.log(d3.extent(data, (d) => d.id));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
您实际上有一个对象,其中的值是数值数组。因此const bytesReadDomain = d3.extent(data, (d) => d.Bytes_Read);
,您应该只使用
const bytesReadDomain = d3.extent(data.Bytes_Read);
这等效于d3.extent([0, 1, 2, 3, 4])
,并且不需要键功能。
对于Time_Epoch
,如果您想将所有值乘以 1000,只需在调用之前Array.prototype.map
将相同的函数应用于所有数组元素:d3.extent()
d3.extent(data.Time_Epoch.map((d) => d * 1000);
推荐阅读
- c# - 如何使用 postgresql 函数获得多结果集
- c# - Mssql, Mvc c#, 邮件触发器,
- android - 从不同设备获取相同应用的信息
- ms-access - 在 Access 中,如何将截断除法与 SQL Server 中链接表上的实际除法进行比较
- php - 与 PHP 相呼应的表单未使用 ajax 提交
- latex - 尝试使用特殊字符对单词进行连字时发出警告
- python - Gensim FastText 计算训练损失
- vue.js - Vue.js中如何处理多组件获取数据?
- reporting-services - 将 power bi 报表服务器部署为 SaaS 解决方案
- javascript - 如何使用javascript用下划线替换字符串中存在的所有空格?