在javascript数组中提取特定范围的值

时间:2011-04-11 12:29:59

标签: javascript arrays

我有这个值数组,如下所示

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

我该怎么做?

请问任何想法?

3 个答案:

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