所以我对 JavaScript 还比较陌生。如果我不太忙的话,也许每个月我会尝试几次尝试一些事情并练习一些东西。
我从事股票工作已经有一段时间了,我看到有一些相当不错的免费 API 可以获取市场数据。我想这将是再次闲逛并可能学到一些东西的好时机(如果是这样,希望保留它)。
我正在使用 ( https://www.alphavantage.co/ ) 的 Alpha Vantage API,它返回一个包含大量数据的 JSON(这里是来自他们网站的演示 JSON,以便您了解我的调用返回的内容(我使用1 分钟间隔,他们的演示使用 5 分钟,但这并不重要): https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=MSFT&interval=5min&outputsize=full&apikey=demo )。
我想选择“时间序列 (Xmin)”对象中的最后一个(最近的日期/时间)对象,以便我可以使用最新日期对象中的更新数据。
我尝试了一些在网上看到的不同解决方案来选择数组/对象中的最后一项,但由于我是个菜鸟,我确信我错过了一些非常简单的东西。或者也许我根本没有以正确的方式处理这个问题。 (我什至浪费了一个小时尝试格式化 JS 内置日期方法的返回值以匹配 API 调用日期格式“YYYY/MM/DD HH:MM:SS”,然后使用它以某种方式选择与 JSON 中匹配的日期但最终对我来说并没有成功,然后我想为什么我不尝试选择最后一个对象。...已经晚了...)
fetch(api)
.then(response => {
return response.json();
})
.then(data => {
console.log(data["Time Series (1min)"]);
let dataProvided = data["Time Series (1min)"];
//my attempt to select the last 'date' (for example 2019-07-26 16:00:00 would be the last one as of friday)
//this returns undefined when console.log
dataProvidedRecentDate = dataProvided[dataProvided.length - 1];
//undefined
console.log(dataProvidedRecentDate);
//this is manually just to see... (not my goal obviously)
dataProvidedSpecificDate = dataProvided["2019-07-26 16:00:00"];
dataProvidedVolume = dataProvidedSpecificDate["5. volume"];
let changeData = document.querySelector('.test_three');
changeData.textContent = dataProvidedVolume;
而不是记录最后一个(最近的)日期对象。我收到未定义
。我尝试过在网上其他地方看到的切片方法,但它也不起作用。如果您猜不到的话,我的最终目标是显示页面上显示的最新日期对象内的数据(例如成交量、开盘价、收盘价、最高价、最低价)。非常感谢任何帮助,我很高兴看到我做错了什么,因为我一直在拔头发。谢谢!
最佳答案
您可能没有注意到,但最新数据是对象的第一个属性,而不是最后一个。没有内置方法来访问对象的第一个属性,但您可以使用 for..in
循环。 for..in
本质上是一个迭代对象属性的迭代器。
你可以做这样的事情
let recent;
for(recent in data["Time Series (5min)"])break;
这会将data["Time Series (5min)"]
第一项的键存储在recent
中,然后中断循环。
您现在拥有第一项的 key ,并且要访问其值,只需使用简单的括号表示法即可。
数据[“时间序列(5分钟)”][最近]
关于javascript - 我如何始终从 API 调用中选择最后一个 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57238428/