JavaScript |Получить данные в пределах объекта - PullRequest
1 голос
/ 09 марта 2019

Я пытаюсь написать функцию, которая создает новый массив объектов, предоставляя мне все данные в диапазоне from и to указанных параметров.

т.е.

const data = [
  {
    timestamp: '2015-09-01T16:00:00.000Z',
    temperature: 27.1,
    dewPoint: 17.1,
  },
  {
    timestamp: '2015-09-01T16:10:00.000Z',
    temperature: 27.2,
    dewPoint: 17.2,
  },
  {
    timestamp: '2015-09-01T16:20:00.000Z',
    temperature: 27.3,
    dewPoint: 17.3,
  },
  {
    timestamp: '2015-09-01T16:30:00.000Z',
    temperature: 27.4,
    dewPoint: 17.4,
  }
]

Идея состоит в том, чтобы иметь вспомогательный метод, который фильтрует и выводит данные в пределах from и to в новом массиве []

function getValuesInRange(from, to) {
  let sortedArray = []
  let filteredValues = []
  let index = indexOf(from) // error => indexOf is not defined

  while (index < sortedArray.length) {
    const valueAtIndex = sortedArray[index]
    if (valueAtIndex.key >= from && valueAtIndex.key < to) {
      filteredValues.push(valueAtIndex.value)
      index++
    } else {
      break
    }
  }
  console.log(filteredValues)
  return filteredValues
}

const fromDateTime = data[0].timestamp)
const toDateTime = data[2].timestamp)

getValuesInRange(fromDateTime, toDateTime)
  • Приведенный выше метод в настоящее время содержит ошибку indexOf is not defined

  • Вкл. getValuesInRange() Массирую ли я данные соответственно, чтобы получить желаемый результат здесь? Не могли бы вы также показать мне ES6 эквивалент этого усилия?

Ответы [ 2 ]

2 голосов
/ 09 марта 2019

Вы можете попробовать следующий способ, используя .getTime() и filter()

Метод getTime() возвращает количество миллисекунд, прошедших с начала эпохи Unix 1010 *

const data = [
  {
    timestamp: '2015-09-01T16:00:00.000Z',
    temperature: 27.1,
    dewPoint: 17.1,
  },
  {
    timestamp: '2015-09-01T16:10:00.000Z',
    temperature: 27.2,
    dewPoint: 17.2,
  },
  {
    timestamp: '2015-09-01T16:20:00.000Z',
    temperature: 27.3,
    dewPoint: 17.3,
  },
  {
    timestamp: '2015-09-01T16:30:00.000Z',
    temperature: 27.4,
    dewPoint: 17.4,
  }
]

function getData(arr,from,to){
  from = new Date(from).getTime();
  to = new Date(to).getTime();
  return arr.filter(obj => {
    let ms = new Date(obj.timestamp).getTime();
    return ms < to && ms > from
  })
}
console.log(getData(data,'2015-09-01T16:00:00.000Z','2015-09-01T16:30:00.000Z'))
1 голос
/ 09 марта 2019

indexOf () - это метод объекта массива.Он не может быть использован отдельно.Он должен использоваться с массивом

let index = arrayname.indexOf(from) 

, поскольку из вашего вопроса в приведенной выше строке кода не ясно, замените имя массива на массив, в котором вы должны найти индекс из

const data = [
  {
    timestamp: '2015-09-01T16:00:00.000Z',
    temperature: 27.1,
    dewPoint: 17.1,
  },
  {
    timestamp: '2015-09-01T16:10:00.000Z',
    temperature: 27.2,
    dewPoint: 17.2,
  },
  {
    timestamp: '2015-09-01T16:20:00.000Z',
    temperature: 27.3,
    dewPoint: 17.3,
  },
  {
    timestamp: '2015-09-01T16:30:00.000Z',
    temperature: 27.4,
    dewPoint: 17.4,
  }
]


function getValuesInRange(from, to) {
  let sortedArray = []
  let filteredValues = []
  let index = arrayname.indexOf(from) // error => indexOf is not defined

  while (index < sortedArray.length) {
    const valueAtIndex = sortedArray[index]
    if (valueAtIndex.key >= from && valueAtIndex.key < to) {
      filteredValues.push(valueAtIndex.value)
      index++
    } else {
      break
    }
  }
  console.log(filteredValues)
  return filteredValues
}

const fromDateTime = data[0].timestamp
const toDateTime = data[2].timestamp
getValuesInRange(fromDateTime, toDateTime)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...