0

d3.js が提供する例を書き直そうとしています。元のコードには次のような関数がありました。

function interpolateValues(values, year) {
var i = bisect.left(values, year, 0, values.length - 1),
    a = values[i];
if (i > 0) {
  var b = values[i - 1],
      t = (year - a[0]) / (b[0] - a[0]);
  return a[1] * (1 - t) + b[1] * t;
}
return a[1];
}

ここで、「値」は次のような配列です。

"income":[[1800,359.93],[1820,359.93],[1913,556.12],[1950,3363.02], etc.

ただし、別の方法でデータを保存します。"name":[[year,value]],... 形式とは異なり、データはデータベースのように異なる方法で保存されます (サンプル データは次のとおりです)。

{"region":"A","income":1178.0,"lifeExpectancy":788.0,"year":1800.0,"population":1292.0,"country":"Angola"},
{"region":"B","income":847.0,"lifeExpectancy":1183.0,"year":1800.0,"population":803.0,"country":"Benin"},
{"region":"A","income":798.0,"lifeExpectancy":765.0,"year":1801.0,"population":967.0,"country":"Angola"},
{"region":"B","income":1293.0,"lifeExpectancy":1497.0,"year":1801.0,"population":792.0,"country":"Benin"},

interpolateValues() 関数を次のような別の関数に置き換えようとしています。

SELECT income FROM dataset WHERE year = 1980

私はこれがSQLであることを知っています。私はそれを使ってアイデアを理解しようとしているだけです。基本的に、データを含む配列、年を含む配列があり、特定の年のデータを返す関数を探しています。

補間機能があると便利ですが、今のところそれほど重要ではありません。問題は、私がちょうど js の使い方を学んでいて、これまでに試したことはどれも失敗したことです。

ご協力いただきありがとうございます!

編集:明確化のための追加情報:

私はこの機能を持っています。

function provideData(year) {
return nations.map(function(d) {
  return {
    name: d.country,
    region: d.region,
income: d.income,
    population: d.population,
    lifeExpectancy: d.lifeExpectancy
  };
});
}

しかし、ご想像のとおり、完全な配列が返されるため、100 年をはるかに超えるデータが出力されます。d.year == year. の場合に d.income を返す方法があればよいのですが。

4

3 に答える 3

1

Underscore.js Find答えを試してみることができます: underscore.js を使用して多次元配列をフィルタリングする

于 2013-07-16T09:15:21.780 に答える
0

Alasql JavaScript SQL ライブラリでそれを行うことができます。

これは例です:

var data = [ {"region":"A","income":1178.0,"lifeExpectancy":788.0,"year":1800.0,"population":1292.0,"country":"Angola"},
     {"region":"B","income":847.0,"lifeExpectancy":1183.0,"year":1800,"population":803.0,"country":"Benin"},
     {"region":"A","income":798.0,"lifeExpectancy":765.0,"year":1801,"population":967.0,"country":"Angola"},
     {"region":"B","income":1293.0,"lifeExpectancy":1497.0,"year":1801,"population":792.0,"country":"Benin"}];

var res = alasql('SELECT MATRIX year, SUM(income) FROM ? GROUP BY year',[data]);

この例を jsFiddle で試してください。

Alasql は、いくつかの JavaScript 拡張機能を備えた標準 SQL を使用するため、任意の式を作成できます。

于 2014-12-21T15:29:07.613 に答える