javascript - 如何在 React 中访问键更改的 JSON 对象
问题描述
我在使用我的 React 应用程序时遇到了困难。我正在调用 AlphaVantage API 来获取 RSI 数据。我想获得这样的最新 RSI 值:
const cryptos = ['AAPL', 'MSFT']
const arr = []
for (var i = 0; i < cryptos.length; i++) {
const cryptoUrl =
'https://www.alphavantage.co/query?function=RSI&symbol=' +
cryptos[i] +
`&interval=weekly&time_period=10&series_type=open&apikey=${apikey}`
arr.push(axios.get(cryptoUrl))
}
Promise.all(arr)
.then(response =>
response.map(res =>
console.log(
res.data['Technical Analysis: RSI']['2019-08-30'][' RSI'],
res.data['Meta Data']['1: Symbol']
)
)
)
.catch(err => console.log(err))
}
一切都很好,除了
res.data['Technical Analysis: RSI']['2019-08-30'][' RSI'],
我正在尝试访问最新的 RSI 值,但是,最新值的时间总是在变化。我不知道如何得到它。
请注意屏幕截图的第 15 行,键的“格式”更改为包括日期和时间。
谢谢,如果您需要更多信息,请告诉我。
解决方案
老实说,混合格式的 API 设计很糟糕。
不过幸运的是,这两种格式都可以通过简单地将其作为参数传递给new Date()
.
new Date('2019-08-30')
new Date('2019-09-06 15:21:38')
转换为Date
对象后,您可以简单地使用<
和>
符号来比较它们以确定哪个是最新的。
要获得最新的,您可以使用Object.keys()
查看所有值,比较它们,然后选择最新的。在下面的示例中,我使用reduce()
查找最新的。
const data = {
'Technical Analysis: RSI': {
'2019-08-01 16:00:00': {
a: 1
},
'2019-09-01': {
b: 1
},
'2019-08-15': {
c: 1
}
}
};
const newest = Object.keys(data['Technical Analysis: RSI'])
.reduce((newest, time) => new Date(time) > new Date(newest) ? time : newest, '1980-01-01'); // '1980-01-01' is just an old default value to start with.
console.log(newest, data['Technical Analysis: RSI'][newest]);
推荐阅读
- wpf - 关于 UserControl 和 WPF 对话框的 DependencyProperty 问题
- javascript - 有没有一种简单的方法可以在 ReactJS 中创建一个嵌套的下拉列表而没有大量的状态?
- python - 4 线性决策树的 3SUM 实现(O(n^2/(logn/log logn)^2/3) 的运行时间)
- python - Python pyplot.hist:如何将每个条形图的总和为 1?
- angular - 从 Angular 6 迁移到 Angular 7
- python - Python 编码。如何解码技术
- excel - 如何禁用excel工作簿中的全部刷新按钮?
- php - 在一定秒数后删除插入的 MySQL 记录
- r - 分组和总结有条件的日期范围方面 - dplyr?
- python - 从 ArgParser 和/或 PyCharm 配置日志记录