2

D3でプロットするために、jQueryを使用してコンマ区切りの数字の文字列を取り込みます。この配列の最大値を取得しようとしていますが、うまくいきません。

var x_data = $('.CostImport').text().split(',');
var y_data = $('.PriceImport').text().split(',');
var r_data = $('.SalesImport').text().split(',');
var c_data = $('.ZoneImport').text().split(',');


 for (i = 0; i < x_data.length; i++) {
   data.push({ "x": x_data[i], "y": y_data[i], "c": c_data[i], "r": r_data[i] });
   }

alert(d3.max(r_data));
alert(d3.max(data, function (d) { return d.r }));

これらのアラートはどちらも同じ番号を渡しますが、これは正しくありません。実際の最大値は 928870 ですが、9975 に戻っています。プロットはすべて正常に機能します (r でサイズと c の色を決定する散布図)。

何か案は?

4

2 に答える 2

5

値が文字列として扱われているようです。parseIntorを使用parseFloatして (値の精度に応じて)、max関数が期待どおりに機能するように整数に変換する必要があります。

文字列配列を int に変換する簡単な関数を次に示します。これはプロトタイプを作成した方がよいでしょうが、簡単で汚い例としてはこれでうまくいきます:

function toIntArray(arr) {
    for (var i = 0; i < arr.length; i++) { 
        arr[i] = +arr[i]; 
    } 
    return arr;
}

コードはそのままにしておきますが、次の行を修正します。

r_data = toIntArray(r_data);
data = toIntArray(data);

alert(d3.max(r_data));
alert(d3.max(data, function (d) { return d.r }));
于 2012-05-22T20:54:20.323 に答える
0

これと同じ問題が発生しましたが、配列ではなくデータオブジェクトを扱っていました。文字列を数字に変換するときに、d3のフィルター関数が非常に役立つことがわかりました。以下は例です

data.filter(function(d,i) {
    d.x = +d.x;
d.y = +d.y;
});

xmax = d3.max(data, function (d) { return d.x });
console.log(xmax);
于 2013-03-10T23:08:06.653 に答える