繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM