2011-06-10 51 views
0

前:在JavaScript中插入「缺失的年份」?

id year value 
SE 1950 67 
SE 1960 71 
SE 1965 82 
NO 1975 65 
NO 1985 75 

後:

data : { 
    SE : { 
     data : { 
      1950 : 67, 
      1951 : 67.4, 
      1952 : 67.8, 
      [...] 
      1965 : 82 
     }, 
     min_year : 1950, 
     max_year : 1965 

    }  
    NO : { 
     data : { 
      [...] 
     }, 
     [...] 
    }  
} 

所以基本上,什麼是填補國內空白/內插基於在JS相鄰值的最有效方法是什麼?

回答

0

JS作爲一種語言沒有工具可以直接幫助你。

您可以很容易地實現線性或多項式插值。多項式(程度爲3)可能會在中間提供略好的數字,但端點可能會有問題 - 取決於數據。

線性插值更容易,雖然總體上我會認爲它不會像高階多項式插值那樣提供精確的估計。

另一種方法可能是樣條(立方相對容易),這對您的目的來說足夠準確。這可能是微小的矯枉過正,雖然可能不是 - 不確定這個要求的範圍。

您可能會考慮在服務器端執行此操作,並將其中一個庫用於實現這些插值函數的其他語言。這將爲您提供一種真正準確而通用的方法來高效地解決問題,而無需自己實施。

這是困難的,因爲精確度,數據的範圍和項目的所有因素在什麼類型的內插的需要,如果這是可以做到的服務器/客戶端的範圍等

0

如果你只是想直線性插值,再給予n_0n_1作爲評價你知道值:

val[n] = val[n_0] + (n - n_0) * (val[n_1] - val[n_0])/(n_1 - n_0); 

鑑於您的SE的數據,例如,對於1960年的插值將是:

67.8 + (1960 - 1952) * (82 - 67.8)/(1965 - 1952) 

即約76.5

+0

說謝謝@Alnitak。當你給出[{year:1950,value:50},{year:1955,value:55},{year:1970,value:65}]時,你能幫助我進一步提供一個函數來返回「缺口填充數組」 ?即返回的數組應該有20個元素。 – dani 2011-06-10 14:17:27

+0

你正在使用錯誤的數據結構 - 因爲它被一個整數索引,所以你應該使用一個數組,而不是一個對象。 – Alnitak 2011-06-10 15:45:16