我有这个值数组,如下所示
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年1月和2004年11月)
并在提交按钮上,我想在它们之间收集卷数据
var volumeData = [];
// I don't know how to write a condition
priceData.push([i, jsonData[i].volume]);
我该怎么做?
请问任何想法?
答案 0 :(得分:1)
为什么过于复杂化的事情:
var volumeData = [], l = jsonData.length;
while (l--) {
var d = Date.parse(jsonData[l].date);
if (d >= startdate && d <= endate) {
volumeData.push(jsonData[l].volume)
};
}
答案 1 :(得分:0)
首先,您需要将日期设置为标准的数字格式,而不是人类可读的格式。
使用(例如)datejs
库进行转换,或者只使用yyyymm
。
一旦你做完了,剩下的应该是显而易见的。只能在最后一刻转换回人类可读的格式。
答案 2 :(得分:0)
编辑 - 忽略此答案:使用@ 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]);
}