Извлечение определенного диапазона значений из массива javascript

#javascript #arrays

#javascript #массивы

Вопрос:

У меня есть этот массив значений, как показано ниже

 var jsonData = 
[{date:'Jan 2004',volume:22088000},{date:'Feb 2004',volume:22088000},    
{date:'Mar 2004',volume:22088000},{date:'Apr 2004',volume:22088000},
{date:'May 2004',volume:22088000},{date:'Jun 2004',volume:22088000},
{date:'July 2004',volume:22088000},{date:'Aug 2004',volume:22088000},
{date:'Sept 2004',volume:22088000},{date:'October 2004',volume:22088000},
{date:'November 2004',volume:22088000},{date:'Dec 2004',volume:22088000}]
  

У меня есть два средства выбора даты (до даты и с даты), в которые я передам это значение даты, например (январь 2004 и ноябрь 2004)

и при нажатии кнопки отправки я хочу собрать данные об объеме между ними

 var volumeData = [];
// I don't know how to write a condition 
priceData.push([i, jsonData[i].volume]);
  

Как я могу это сделать?

пожалуйста, есть идеи?

Ответ №1:

зачем все усложнять:

 var volumeData = [], l = jsonData.length;
while (l--) {
    var d = Date.parse(jsonData[l].date);
    if (d >= startdate amp;amp; d <= endate) { 
        volumeData.push(jsonData[l].volume) 
    };
} 
  

Ответ №2:

Во-первых, вам нужно поместить ваши даты в стандартный числовой формат, а не в удобочитаемый.

Используйте (например) datejs библиотеку для выполнения преобразования или просто используйте yyyymm вместо этого.

Как только вы это сделаете, остальное должно быть очевидно. Конвертируйте обратно в формат, доступный для чтения человеком, только в последний возможный момент.

Ответ №3:

Редактировать — Игнорируйте этот ответ: используйте ответ @herostwist ; это намного проще 🙂

Для этого есть несколько этапов:

Чтобы упростить задачу, вам нужно отсортировать данные, чтобы мы могли извлечь подмножество. К сожалению, выполнение наивной сортировки по дате упорядочит их в алфавитном порядке, поэтому нам нужно преобразовать метки дат во что-то полезное, то есть числовое. (Примечание, Date.parse

 for(var i=0, len=jsonData.length; i<len; i  ) {
  jsonData[i].date = Date.parse(jsonData[i].date);
}
  

Затем мы можем отсортировать массив данных:

 jsonData.sort(function(a, b) {
  return a.date < b.date ? -1 : 1;
});
  

Затем выполните итерацию по массиву, пока не найдете первый экземпляр нижней границы:

 var lower = Date.parse('Jan 2004'),
    lower_index = -1;

for(var i=0, len=jsonData.length; i<len; i  ) {
  if(jsonData[i].date === lower) {
    lower_index = i;
    break;
  }
}
  

И последний экземпляр верхней границы:

 var upper = Date.parse('November 2004'),
    upper_index = -1;

for(var i=0, len=jsonData.length; i<len; i  ) {
  if(jsonData[i].date === upper) {
    upper_index = i;
  }
}
  

Затем вы можете взять фрагмент исходных данных и создать свое подмножество:

 var data = jsonData.slice(lower, upper 1),
    volumeData = [];

for(var i=0, len=jsonData.length; i<len; i  ) {
  volumeData.push([i, data[i].volume]);
}