javascript - 如何将数百个 JS 对象属性放入数组中以用作 chart.js 轴/数据
问题描述
您好,我正在尝试使用 Chart.JS 构建一个加密跟踪器应用程序。
我有 2 小时的价格数据,以数组中 120 个对象的形式出现。我想使用数组中每个对象的“高”和“时间”属性作为图表的轴。
我将如何获取这些并将它们作为标签和数据集数据插入到 chart.JS 的数据部分?我需要创建一些变量和循环吗?与地图功能有关吗?
这些是我的一些预感,但我很讨厌菜鸟,感谢任何帮助,谢谢!
解决方案
好吧,听着你这个臭菜鸟。你已经完成了 99% 的工作。
首先,我们将您的问题改写为一个笼统的问题,以平息困扰 stackoverflow 的愤怒情绪:
我有一系列加密价格。如何将其转化为
chart.js
可以使用的数据?
这是一个“做我的家庭作业”的问题,这将使 stackoverflow 抛出语法错误并可能引发愤怒的反对票。
因此,我们必须分解它,找到问题的症结并加以整理。
- 接受什么
chart.js
作为数据?- 在
chart.js
的网页中,您可以找到它的文档,这些文档看起来写得很好。由于您想绘制价格与时间的关系,因此您需要积分,也就是[{x:<high price>, y:<time>}]
.
- 在
- 你有什么样的数据?
- 根据你的问题和照片,你有类似的东西:
[{high: 1, time: 2, ... /*etc*/}]
- 根据你的问题和照片,你有类似的东西:
现在你可以问类似
如何将一种类型的对象数组转换为另一种类型的对象数组?
我必须用一些图书馆来绘制加密价格。如何优雅地将数组
{high: 1, time: 2, ... /*etc*/}
转换为数组{x:<high price>, y:<time>}
?
可能会发生三件事。一,你会发现其他人已经问过同样的问题,如果不先采取这一步,你是不会知道的。第二,通过尝试找到更好的方法来提出问题,您自己找到了答案(您几乎做到了,顺便说一句,干得好)。第三,无论如何你仍然需要问它,但现在你的问题很漂亮,你会吸引所有的 stackoverflow 小仙女,他们现在将竞相回答你的有价值的问题,即使认为这是和以前一样的问题。
其次,我们使用map 函数将一种类型的对象数组转换为另一种类型的对象数组。
var cryptoprices = [
{high:1, time:1, fields:"that", you:"don't", care:"about"},
{high:9, time:2, otherfields:"that", arein:"theway"}
];
//map is a function that all arrays have.
//It calls a function on each array element, and returns an array with the results of that function.
//So you only need to focus on how you would transform a single cryptoprice into a single point of data:
function transform(cryptoprice) {
//A single point should be an object that contains only the fields x and y.
//Since you are interested in the price and time fields only...
let point = {
x: cryptoprice.time,
y: cryptoprice.high
}
return point;
}
var points = cryptoprices.map(transform)
console.log(points);
// expected output: Array [Object { x: 1, y: 1 }, Object { x: 2, y: 9 }]
最后,简短而优雅的版本:
cryptoprices.map(c => ({x:c.time, y:c.high}))
:D
推荐阅读
- ios - 如何添加一个已经有父控制器的视图控制器作为另一个视图控制器的子控制器
- pdf-generation - 在客户端生成 PDF
- go - 带上下文取消的异步/等待模式
- javascript - 将 jest 测试套件生成为单独的文件而不是单个文件
- python - plotly:来自 ISO-3 代码的有效国家名称列表
- html - 在 power shell 中将 Splatted Array 转换为格式化的 HTML 电子邮件而不创建文件
- javascript - 在 Axios 中发出多个 Post 请求,然后获取所有响应以发出另一个请求
- reactjs - 使网格布局 div 具有相同的高度
- google-cloud-run - 如何确保仅在我的新云运行服务部署上提供流量?
- c# - 如何将迭代计数从主页带到剃刀中的嵌套局部视图