LoginSignup
1
1

More than 5 years have passed since last update.

d3.min() が正しく値を返さない?

Last updated at Posted at 2016-07-05
var data = [{value: "3"},{value: "10"},{value: ""},{value: "5"}];

上記のようなオブジェクトの配列"data"から、"value"の値の最小値を求めたい。

var minVal = d3.min(data, function(e){
    return e["value"];
});

これだと、

""

が最小値として返ってくる。
d3.min()は、undefinedやNaNを無視してくれるけど、""は、無視してくれないから。

var minVal = d3.min(data, function(e){
    if(e["value"] == "") return undefined;
    return e["value"];
});

とすれば、""も無視してくれる。
でも、今度は、

"10"

が返ってくる。
d3.min()は、自然順(Natural sort order)*で最小値を返すから。
*("1" < "10" < "2" < "25" < "3" みたいな順番)

文字列を、数値に変換する。

var minVal = d3.min(data, function(e){
    if(e["value"] == "") return undefined;
    e["value"] = parseInt(e["value"]);
    return e["value"];
});

これで無事、

3

が返ってきた。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1