2017-03-23 55 views
0

我有以下格式兩個JavaScript數據陣列,如何在highstocks繪製圖之前連接兩個系列?

series one: [{date:20170220,price:25},{date:20170221,price:25},......{date:20170322,price:25},{date:20170323,price:55}] 
series two: [{date:20170220,price:30},{date:20170221,price:28},......{date:20170322,price:24},{date:20170323,price:23}] 

兩個值是{日期,價格}。我們不能保證數據可用於在這兩個系列的具體日期。我想創建第三個系列,其中包括每天的average價格。有沒有辦法獲得highstocks中的第三個系列。欣賞任何JavaScript基礎解決方案。

+0

你想爲缺少的日期是什麼?是平均還是保持原樣? –

+0

對於缺失的日期,我想在第三個系列中保留「未定義」的平均值 – Channa

+0

這個「{20170220,25}」數據結構是什麼?不是一個對象嗎? –

回答

1

我覺得這個片段會通過你想要的東西來解決你的問題。

只是循環遍歷2個數組並創建第三個數組。我將price鍵作爲您的要求未定義。

var s1 = [{date:20170220, price: 25},{date: 20170221, price: 25},{date: 20170322, price: 25},{date: 20170325,price: 55}]; 
 
var s2 = [{date: 20170220,price: 30},{date: 20170221,price: 28},{date: 20170323, price: 24},{date: 20170324, price: 23}]; 
 

 
var sortHelper = function(a, b){return a.date - b.date} 
 

 
//sorting them for sanity 
 
s1.sort(sortHelper); 
 
s2.sort(sortHelper); 
 
var s1Index = 0, s2Index = 0, s3 = []; 
 
while(s1Index < s1.length || s2Index < s2.length){ 
 
    if(s1Index >= s1.length){ //for extreme conditions 
 
    for(;s2Index < s2.length; s2Index++){ 
 
     s3.push({ 
 
     date: s2[s2Index].date 
 
     }); 
 
    } 
 
    break; 
 
    } 
 
    if(s2Index >= s2.length){ //for extreme conditions 
 
    for(;s1Index < s1.length; s1Index++){ 
 
     s3.push({ 
 
     date: s1[s1Index].date 
 
     }); 
 
    } 
 
    break; 
 
    } 
 
    if(s1[s1Index].date === s2[s2Index].date){ 
 
    s3.push({ 
 
     date: s1[s1Index].date, 
 
     price: (s1[s1Index].price + s2[s2Index].price)/2 
 
    }); 
 
    s1Index++; 
 
    s2Index++; 
 
    }else if(s1[s1Index].date < s2[s2Index].date){ 
 
    s3.push({ 
 
     date: s1[s1Index].date 
 
    }); 
 
    s1Index++; 
 
    }else if(s1[s1Index].date > s2[s2Index].date){ 
 
    s3.push({ 
 
     date: s2[s2Index].date 
 
    }); 
 
    s2Index++; 
 
    } 
 
} 
 

 
console.log(s3);

相關問題