【问题标题】:Impute missing values in JavaScript array在 JavaScript 数组中估算缺失值
【发布时间】: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 对数据进行排序。

标签: javascript sql arrays


【解决方案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)

【讨论】:

    猜你喜欢
    • 2020-06-19
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多