javascript - 使用 Angular 在 Highcharts 中绘制的数据自己乘以 1000
问题描述
我试图绘制的数据是以下形式:
[
[24894174208.0, 1604842800],
[24903880704.0, 1604843100]
]
where x = data points; y = UNIX_EPOC_Time
在绘图时,我正在交换 x,y;以便UNIX_EPOC_Time
在X-axis
& 上绘制数据点Y-axis
我必须乘以UNIX_EPOC_Time
:1000
Javascript 在内部使用毫秒,而普通UNIX
时间戳通常以秒为单位。(为什么我需要在 JavaScript 中将 unix 时间戳乘以 1000?)
此外,我试图在用点(黄色/橙色/红色)绘制的 dataPoints 中找到异常。
但是,在函数
js[isIn(anomoly, point){...}]
在我发现数据点异常的地方,我看到数据点采用以下形式:
[1604923500000, 22179459072000]
代替:
[1604923500, 22179459072.0]
因此,我必须将数据点(此处:)除以22179459072000
将1000
其恢复为原始形式22179459072.0
,以便将其绘制在图表上。
我不确定为什么会这样。
我已经在stackblitz中重现了这个问题。
解决方案
经过一番调试,终于找到了问题的根源。
发生这种情况是因为您克隆数据的方式。
let clone_element = { ...element };
扩展运算符不会创建元素的深层副本,它只是浅层副本,这意味着其中的某些部分clone_element
仍然会引用导致突变的数据源。
要解决这个问题,您可以使用例如 lodash 的cloneDeep()
. 这个函数会产生一个真正的深拷贝,所以你不可能改变你的初始数据。
const clone_element = cloneDeep(element);
现场演示:
附加参考:
推荐阅读
- android - 如果设备锁定为纵向,我如何获取设备的方向?
- arrays - 字符串如何由指针而不是 C 中的字符数组保存?
- api - 使用 Flutter 向 Flask API 发送 http Post-Request(包含图像)
- flutter - Flutter中的Circle/wheel ScrollView
- ubuntu - Jenkins 正在运行但无法通过公共 IP 地址访问
- sql - 如何使用过分区
- matlab - Matlab 上的绘图问题 我怎么画?
- css - CSS LESS 颜色混合没有获得新的价值
- list - 从 ListView.builder Flutter 中删除项目
- android - Android SdkManager --list 没有打开