MomentJS - более чистый способ получения почасовой цены за последние 24 часа - PullRequest
0 голосов
/ 01 октября 2018

Спасибо за всю помощь заранее.Я постараюсь описать это как можно лучше.

То, что я пытаюсь сделать, это получить список цен из массива, который содержит цены, обновляемые каждую минуту.В частности, я хотел бы получить список каждой цены за каждый час за последние 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]);

1 Ответ

0 голосов
/ 02 октября 2018

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 до 23 часов, исправьте цикл следующим образом: (let i = 0; i < 24; i++)

...