2

私はこれに似た機能を持つJSONデータでD3を使用しています:

 d3.json("http://api.json", function(jsondata) {
 var data = jsondata.map(function(d) { return d.number; });

これにより、データが等しくなります["2", "5", "8", "12"]

次に、使用する場合: var x = d3.scale.linear() .domain([0, d3.max(data)])

返される最大値は 12 ではなく 8 です。これは、8 が 12 分の 1 より大きいためだと思いますが、これを修正する方法がわかりません。ありがとう!

4

1 に答える 1

6

API リファレンスによると、d3.maxは自然順序を使用して最大値を返します。文字列の配列の最大値を計算しているため、辞書順 (アルファベット順)が使用されます。比較:

console.log("8" > "12"); // true
console.log(8 > 12); // false

配列の数値の最大値を計算したい場合は、まずそれらの文字列を数値に変換する必要があります。これを行う便利な方法は、単項演算+子です。

var data = jsondata.map(function(d) { return +d.number; });

必要に応じて、parseFloat、parseInt、Number、またはその他のさまざまなメソッドを使用して、文字列を数値に変換することもできます。技術的には、これを d3.max 呼び出し ( ) の一部として行うこともできますが、d3.max(data, Number)通常は強制を明示的に行う方が高速で安全です。

もちろん、すでに JSON を使用しており、JSON は型指定されたシリアル化形式であるため、文字列ではなく JSON に数値を格納する方が理にかなっている場合もあります。そうすれば、型強制は必要ありません。

于 2012-08-03T23:11:04.800 に答える