[英]d3 creating path for each object in array, instead of using each objects x and y properties
[英]D3 sort an array of objects on 2 object properties
我有一个数据集,其中包含4个对象属性的对象数组,如下所示:
var dataset = [{
key: 0,
brand: "A",
value: 10,
size: 10
}, {
key: 1,
brand: "B",
value: 11,
size: 10
}, {
key: 2,
brand: "C",
value: 12,
size: 9
}, {
key: 3,
brand: "D",
value: 13,
size: 9
}, {
key: 4,
brand: "E",
value: 14,
size: 9
}, {
key: 5,
brand: "G",
value: 15,
size: 9
}, {
key: 6,
brand: "F",
value: 16,
size: 9
}, {
key: 7,
brand: "H",
value: 17,
size: 9
}, {
key: 8,
brand: "I",
value: 18,
size: 9
}, {
key: 9,
brand: "J",
value: 19,
size: 9
}, {
key: 10,
brand: "K",
value: 20,
size: 9
}];
然后我用D3构建一个图表,将value
显示为水平线,并将size
为位于线条顶部的气泡(请参阅http://jsfiddle.net/G74Aq/4/ )。
我为每个上述对象属性添加了一个排序函数,除了用于排序中的键函数的key
属性。 按名称和值排序时,这可以正常工作,但是当我按大小行排序时,气泡会按不同方式排序。 请注意,只有当键值达到10时才会发生这种情况,这表明字典排序问题,我认为我可以通过在<10之前的每个键号前面添加0来避开(这没有改变任何东西)。
我的问题是:为什么不同的元素以不同的方式排序,即使应用的排序方法都使用相同的键功能? 当然,我如何对齐排序函数?
尝试强制它按数值而不是字符串排序。 一元+
运算符可以实现这一点。
function getSortFunction(propertyName) {
return function(a, b) {
return +(a[propertyName]) > +(b[propertyName]);
}
}
dataset.sort(getSortFunction("size"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.