2011-06-10 114 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