非常感谢您提供的所有帮助。我会尽力描述这一点。
我想做的是从包含每分钟更新价格的数组中获取价格列表。具体来说,我想要过去24小时内每小时价格的清单。因此,一天有效的24个价格。每个价格都有一个时间戳,因此我正在使用momentJS isBefore
和isAfter
来缩小搜索范围。
下面的代码显示了过去两个小时内如何获取所需的数据。这很好。但是我不觉得重复24次是不对的。循环应该能够满足我的需求,但是我不确定如何实现它。非常感谢您的帮助。很抱歉,如果我没有很好地描述这个问题
const lastHourArray = [];
const lastHourArray2 = [];
lodash.forEach(tickerHistoryData, (data) => {
const dateNow = moment();
const prevHour = moment().subtract(1, 'hours');
const prevTwoHours = moment().subtract(2, 'hours');
const instanceDate = moment(data[0]);
const isItAnHourAgo = instanceDate.isBefore(dateNow) && instanceDate.isAfter(prevHour);
const isItTwoHoursAgo = instanceDate.isBefore(prevHour) && instanceDate.isAfter(prevTwoHours);
if (isItAnHourAgo) {
const hourObject = {
hour: 1,
price: data[4],
};
lastHourArray.push(hourObject);
}
if (isItTwoHoursAgo) {
const hourObject2 = {
hour: 2,
price: data[4],
};
lastHourArray2.push(hourObject2);
}
});
tickerInstruments[findInstrument.productSymbol].hourlyPrice.push(lastHourArray[lastHourArray.length - 1]);
tickers[findInstrument.name].hourlyPrice.push(lastHourArray[lastHourArray.length - 1]);
tickerInstruments[findInstrument.productSymbol].hourlyPrice.push(lastHourArray2[lastHourArray2.length - 1]);
tickers[findInstrument.name].hourlyPrice.push(lastHourArray2[lastHourArray2.length - 1]);
答案 0 :(得分:1)
lodash.forEach(tickerHistoryData, (data) => {
const dateNow = moment();
const instanceDate = moment(data[0]);
for (let i = 1; i <= 24; i++) {
const prevHour = moment().subtract(i, 'hours');
const isItAnHourAgo = instanceDate.isBefore(dateNow) && instanceDate.isAfter(prevHour);
if (isItAnHourAgo) {
const hourObject = {
hour: i,
price: data[4],
};
lastHourArray.push(hourObject);
}
}
});
您可以尝试这项工作吗?
data
中的每个tickerHistoryData
都会循环24次并检查时间。
如果您需要检查0到23h之间的时间,请像(let i = 0; i < 24; i++)