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 を返す方法があればよいのですが。