D3对2个对象属性上的对象数组进行排序

时间:2014-02-19 11:32:57

标签: javascript sorting d3.js

我有一个包含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(没有改变任何东西)。

我的问题是:为什么不同的元素以不同的方式排序,即使应用的排序方法都使用相同的键功能?当然,我如何对齐排序函数?

1 个答案:

答案 0 :(得分:1)

尝试强制它按数值而不是字符串排序。一元+运算符可以实现这一点。

function getSortFunction(propertyName) {
    return function(a, b) {
        return +(a[propertyName]) > +(b[propertyName]);
    }
}

dataset.sort(getSortFunction("size"));
相关问题