Фильтрация данных между указанными c отметками времени с использованием javascript - PullRequest
1 голос
/ 24 апреля 2020

Мне нужно отфильтровать данные, где отметка времени> 06.

"use strict"

const data =  [ 
  {timestamp: "2020-04-23 05:05", totalAvg: 2.596211180124224},
  {timestamp: "2020-04-23 05:10", totalAvg: 3.22052273203436},
  {timestamp: "2020-04-23 05:15", totalAvg: 4.75883386099804},
  {timestamp: "2020-04-23 05:20", totalAvg: 4.052205882352941},
  {timestamp: "2020-04-23 05:25", totalAvg: 6.801380301941049},
  {timestamp: "2020-04-23 05:30", totalAvg: 5.147239169614846},
  {timestamp: "2020-04-23 05:35", totalAvg: 5.035438241980298},
  {timestamp: "2020-04-23 05:40", totalAvg: 5.043628013777267},
  {timestamp: "2020-04-23 05:45", totalAvg: 3.491275770565422},
  {timestamp: "2020-04-23 05:50", totalAvg: 3.9865817073170735},
  {timestamp: "2020-04-23 05:55", totalAvg: 2.8146341463414632},
  {timestamp: "2020-04-23 06:00", totalAvg: 4.0066161616161615},
  {timestamp: "2020-04-23 06:05", totalAvg: 4.870049261083743},
  {timestamp: "2020-04-23 06:10", totalAvg: 3.3189162561576357}
];


var filteredZoneData = _.filter(data, o => {
  return !((parseInt((o.timestamp).substring(11, 13)) < 06) || (parseInt(o.timestamp.substring(11, 13)) < 24));
})

console.log(filteredZoneData)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

здесь использование 06 дает ошибку, такую ​​как Legacy octal literals are not allowed in strict mode

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Вы можете проверить подстроку напрямую с требуемым значением в виде строки.

const data =  [ 
  {timestamp: "2020-04-23 05:05", totalAvg: 2.596211180124224},
  {timestamp: "2020-04-23 05:10", totalAvg: 3.22052273203436},
  {timestamp: "2020-04-23 05:15", totalAvg: 4.75883386099804},
  {timestamp: "2020-04-23 05:20", totalAvg: 4.052205882352941},
  {timestamp: "2020-04-23 05:25", totalAvg: 6.801380301941049},
  {timestamp: "2020-04-23 05:30", totalAvg: 5.147239169614846},
  {timestamp: "2020-04-23 05:35", totalAvg: 5.035438241980298},
  {timestamp: "2020-04-23 05:40", totalAvg: 5.043628013777267},
  {timestamp: "2020-04-23 05:45", totalAvg: 3.491275770565422},
  {timestamp: "2020-04-23 05:50", totalAvg: 3.9865817073170735},
  {timestamp: "2020-04-23 05:55", totalAvg: 2.8146341463414632},
  {timestamp: "2020-04-23 06:00", totalAvg: 4.0066161616161615},
  {timestamp: "2020-04-23 06:05", totalAvg: 4.870049261083743},
  {timestamp: "2020-04-23 06:10", totalAvg: 3.3189162561576357}
];


var filteredZoneData = _.filter(data, o => 
  o.timestamp.slice(11, 13) >= '06' && o.timestamp.slice(11, 13) < '24'
)

console.log(filteredZoneData)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
1 голос
/ 24 апреля 2020

Нет необходимости проверять 06, когда вы все равно анализируете, поэтому измените значение на

var filteredZoneData = _.filter(
  data, o => +o.timestamp.substring(11, 13) >= 6 // there will be no 24 in the timestamp 
); 

или на диапазон:

var filteredZoneData = _.filter(data, o => { 
  const t = +o.timestamp.substring(11, 13);
  return t >= 6 && t < 24;
}); 

Пример использования loda sh

"use strict"

const data = [ {timestamp: "2020-04-23 05:05", totalAvg: 2.596211180124224}, {timestamp: "2020-04-23 05:10", totalAvg: 3.22052273203436}, {timestamp: "2020-04-23 05:15", totalAvg: 4.75883386099804}, {timestamp: "2020-04-23 05:20", totalAvg: 4.052205882352941}, {timestamp: "2020-04-23 05:25", totalAvg: 6.801380301941049}, {timestamp: "2020-04-23 05:30", totalAvg: 5.147239169614846}, {timestamp: "2020-04-23 05:35", totalAvg: 5.035438241980298}, {timestamp: "2020-04-23 05:40", totalAvg: 5.043628013777267}, {timestamp: "2020-04-23 05:45", totalAvg: 3.491275770565422}, {timestamp: "2020-04-23 05:50", totalAvg: 3.9865817073170735}, {timestamp: "2020-04-23 05:55", totalAvg: 2.8146341463414632}, {timestamp: "2020-04-23 06:00", totalAvg: 4.0066161616161615}, {timestamp: "2020-04-23 06:05", totalAvg: 4.870049261083743}, {timestamp: "2020-04-23 06:10", totalAvg: 3.3189162561576357} ];

var filteredZoneData = _.filter(data, o => +o.timestamp.substring(11, 13) >= 6); // there will be no 24 in the timestamp

console.log(filteredZoneData)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

Но зачем использовать библиотеку, когда JS может обойтись без нее?

const data = [ {timestamp: "2020-04-23 05:05", totalAvg: 2.596211180124224}, {timestamp: "2020-04-23 05:10", totalAvg: 3.22052273203436}, {timestamp: "2020-04-23 05:15", totalAvg: 4.75883386099804}, {timestamp: "2020-04-23 05:20", totalAvg: 4.052205882352941}, {timestamp: "2020-04-23 05:25", totalAvg: 6.801380301941049}, {timestamp: "2020-04-23 05:30", totalAvg: 5.147239169614846}, {timestamp: "2020-04-23 05:35", totalAvg: 5.035438241980298}, {timestamp: "2020-04-23 05:40", totalAvg: 5.043628013777267}, {timestamp: "2020-04-23 05:45", totalAvg: 3.491275770565422}, {timestamp: "2020-04-23 05:50", totalAvg: 3.9865817073170735}, {timestamp: "2020-04-23 05:55", totalAvg: 2.8146341463414632}, {timestamp: "2020-04-23 06:00", totalAvg: 4.0066161616161615}, {timestamp: "2020-04-23 06:05", totalAvg: 4.870049261083743}, {timestamp: "2020-04-23 06:10", totalAvg: 3.3189162561576357} ];


let filteredZoneData = data.filter(
  dt => dt.timestamp.split(" ")[1] > "06"
);
console.log(filteredZoneData);

// or if you prefer

filteredZoneData = data.filter(
  dt => parseInt(dt.timestamp.split(" ")[1]) >= 6
);

console.log(filteredZoneData);
...