2011-04-11 39 views
0

我有此數組值如下所示提取的JavaScript陣列內的值的Specfic範圍

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

首先,你需要把你的日期變成標準的數字格式,而不是人類可讀的格式。

使用(比如)datejs庫來進行轉換,或只是使用yyyymm代替。

一旦你這樣做了,其餘的應該是顯而易見的。只有在最後時刻才能轉換爲可讀格式。

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

這裏有一個小提琴演示:http://jsfiddle.net/8atGs/ – herostwist 2011-04-11 13:18:12