2

我正在使用 jQuery 引入一串以逗号分隔的数字,以便在 D3 中进行绘图。我试图获得这个数组的最大值,但进展不顺利。

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 中的 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);
于 2013-03-10T23:08:06.653 回答