在 JavaScript 数组中估算缺失值
Posted
技术标签:
【中文标题】在 JavaScript 数组中估算缺失值【英文标题】:Impute missing values in JavaScript array 【发布时间】:2016-10-31 15:34:34 【问题描述】:我有以下 javascript 代码,它使用 sql.js 库与远程 SQL 数据库进行通信。
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://dl.dropboxusercontent.com/u/540963/test.sqlite', true);
xhr.responseType = 'arraybuffer';
var output = [];
xhr.onload = function(e)
var uInt8Array = new Uint8Array(this.response);
var db = new SQL.Database(uInt8Array);
var data = db.exec("SELECT year, weight FROM freq_data WHERE doi = 'D007266'");
$.each(data[0].values, function(key, value)
output.push('year': value[0], 'weight': value[1]);
);
;
xhr.send();
输出存储在output
数组中。例如,对于给定的数组,数据如下:
year=1996, weight=3
year=1999, weight=2
year=2004, weight=5
year=2005, weight=3
year=2006, weight=2
数据存在一些差距;例如,1997、1998、2000-2003 年没有条目。我想知道如何估算数据以用 0 值填充缺失的年份以结束:
year=1996, weight=3
year=1997, weight=0
year=1998, weight=0
year=1999, weight=2
...
year=2006, weight=2
最合适的方法是什么?
【问题讨论】:
在数组上循环,跟踪年份,为缺少的添加条目... 数据是否保证排序? @TimoSta 是的,我可以使用 SQL 对数据进行排序。 【参考方案1】:假设数据将按年份排序,您可以像这样使用.reduce()
:
var data = [ year: 1996, weight: 3,
year: 1999, weight: 2,
year: 2004, weight: 5,
year: 2005, weight: 3,
year: 2006, weight: 2 ];
var final = data.reduce(function(prev, curr, index, arr)
prev.push(curr);
if (index < arr.length - 1)
var nextYearInData = arr[index + 1].year;
var yearToAdd = curr.year + 1;
while (yearToAdd < nextYearInData)
prev.push(year: yearToAdd, weight: 0);
yearToAdd++;
return prev;
, []);
console.log(final)
【讨论】:
以上是关于在 JavaScript 数组中估算缺失值的主要内容,如果未能解决你的问题,请参考以下文章