#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]);
}