我有一个包含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
属性之外,我为每个上述对象属性添加了一个sort函数,该属性用于排序中的键函数。按名称和值排序时,这可以正常工作,但是当我按大小行排序时,气泡会按不同方式排序。请注意,只有当键值达到10时才会出现这种情况,这表明字典排序问题,我认为我可以通过在每个键值低于0的前面加上0来绕过< 10(没有改变任何东西)。
我的问题是:为什么不同的元素以不同的方式排序,即使应用的排序方法都使用相同的键功能?当然,我如何对齐排序函数?
答案 0 :(得分:1)
尝试强制它按数值而不是字符串排序。一元+
运算符可以实现这一点。
function getSortFunction(propertyName) {
return function(a, b) {
return +(a[propertyName]) > +(b[propertyName]);
}
}
dataset.sort(getSortFunction("size"));