为了在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颜色),所以我有点困惑为什么我不能拉出最大值。
有什么想法吗?
发布于 2012-05-22 20:54:20
听起来这些值就像是字符串一样。您需要使用parseInt
或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 }));
发布于 2013-03-10 23:08:07
遇到了同样的问题,但我处理的是数据对象而不是数组。在将字符串转换为数字时,我发现d3中的filter函数非常有用。下面是一个例子
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);
https://stackoverflow.com/questions/10709950
复制