Как я могу извлечь увеличивающиеся последовательные значения? - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть образец массива объектов ...

const entries = [
  {
    userID: 1,
    date: '2019/06/15',
    numSteps: 3577,
    minutesActive: 140,
    flightsOfStairs: 16
  },
  {
    userID: 1,
    date: '2019/06/16',
    numSteps: 6637,
    minutesActive: 175,
    flightsOfStairs: 36
  },
  {
    userID: 1,
    date: '2019/06/17',
    numSteps: 14329,
    minutesActive: 168,
    flightsOfStairs: 18
  },
  {
    userID: 1,
    date: '2019/06/18',
    numSteps: 4419,
    minutesActive: 165,
    flightsOfStairs: 33
  },
  {
    userID: 1,
    date: '2019/06/19',
    numSteps: 8429,
    minutesActive: 275,
    flightsOfStairs: 2
  },
  {
    userID: 1,
    date: '2019/06/20',
    numSteps: 14478,
    minutesActive: 140,
    flightsOfStairs: 12
  },
  {
    userID: 1,
    date: '2019/06/21',
    numSteps: 6760,
    minutesActive: 135,
    flightsOfStairs: 6
  },
  {
    userID: 1,
    date: '2019/06/22',
    numSteps: 10289,
    minutesActive: 119,
    flightsOfStairs: 6
  },
  {
    userID: 1,
    date: '2019/06/23',
    numSteps: 8213,
    minutesActive: 122,
    flightsOfStairs: 27
  },
  {
    userID: 1,
    date: '2019/06/24',
    numSteps: 11654,
    minutesActive: 270,
    flightsOfStairs: 19
  }
]

Я пытаюсь найти случаи увеличения numSteps через a для l oop, поэтому, если есть последовательные дни увеличения шагов , те дни попадают в новый массив. Это мой l oop ...

let dates = []

for (var i = 0; i < this.entries.length - 1; i++) {
      if (this.entries[i].numSteps < this.entries[i + 1].numSteps) {
        dates.push(this.entries[i])
      }
    }

Я очень близок к тому, чтобы заставить это работать, но не могу понять, как вычислить sh окончательное значение до того, как условие будет выполнено. Я должен получить первые три индекса, помещенные в новый массив, но я получаю только два. Я понимаю, почему это происходит, потому что к тому времени, когда я нажимаю на третий индекс, условие в моем l oop уже не выполняется. Я просто не уверен, как я могу определить sh индексы, которые соответствуют условию, и индекс непосредственно после этого. Какие-либо предложения? Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2020

Вам нужно сделать так, чтобы for l oop охватывал весь диапазон, а затем улучшите оператор if, чтобы сравнить его со следующим и предыдущим.

let len = this.entries.length;
for (var i = 0; i < len ; i++) {
    if ((i < len - 1 && this.entries[i].numSteps < this.entries[i + 1].numSteps)
     || (i > 0 && this.entries[i - 1].numSteps < this.entries[i].numSteps)) {
        dates.push(this.entries[i])
    }
}
...