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
が返ってきた。