首页 > 解决方案 > 使用 Angular 在 Highcharts 中绘制的数据自己乘以 1000

问题描述

我试图绘制的数据是以下形式:

[
    [24894174208.0, 1604842800],
    [24903880704.0, 1604843100]
]
where x = data points; y = UNIX_EPOC_Time

在绘图时,我正在交换 x,y;以便UNIX_EPOC_TimeX-axis& 上绘制数据点Y-axis

我必须乘以UNIX_EPOC_Time1000Javascript 在内部使用毫秒,而普通UNIX时间戳通常以秒为单位。(为什么我需要在 JavaScript 中将 unix 时间戳乘以 1000?

此外,我试图在用点(黄色/橙色/红色)绘制的 dataPoints 中找到异常。

但是,在函数

js[isIn(anomoly, point){...}]

在我发现数据点异常的地方,我看到数据点采用以下形式:

[1604923500000, 22179459072000]

代替:

[1604923500, 22179459072.0]

因此,我必须将数据点(此处:)除以221794590720001000其恢复为原始形式22179459072.0,以便将其绘制在图表上。

我不确定为什么会这样。

我已经在stackblitz中重现了这个问题。

标签: javascriptangulardeep-copy

解决方案


经过一番调试,终于找到了问题的根源。

发生这种情况是因为您克隆数据的方式。

let clone_element = { ...element };

扩展运算符不会创建元素的深层副本,它只是浅层副本,这意味着其中的某些部分clone_element仍然会引用导致突变的数据源。

要解决这个问题,您可以使用例如 lodash 的cloneDeep(). 这个函数会产生一个真正的深拷贝,所以你不可能改变你的初始数据。

const clone_element = cloneDeep(element);

现场演示:

附加参考:


推荐阅读