替代d3.ascending或d3.descending实现所需的顺序

时间:2018-01-20 22:13:25

标签: javascript d3.js

我有一个图表,我希望按照以下顺序显示沿x轴的列:

start of 2013, end of 2013, 2014, 2015, 2016

问题是我使用(in this Plunker)的代码会按升序对列进行排序,如下所示:

2014, 2015, 2016, end of 2013, start of 2013

这样做的代码就是:

    var d_sequence = sequenceSet.values().sort(d3.ascending);
    var d_categories = categorySet.values().sort(d3.ascending);
    // output sequence and categories for debugging
    console.log(" data sequence: " + d_sequence);
    if (sequence) {
      console.log("input sequence: " + sequence);
    } else {
      sequence = d_sequence;
    }

我的问题是:如何修改此代码,以便按如下方式对列进行排序? enter image description here

我想有一些方法可以说,"根据以下数组"中的顺序对列进行排序,然后定义: [start of 2013, end of 2013, 2014, 2015, 2016] 或许还有一些其他方式可以调整或搭载d3.ascending的逻辑。但我不知道如何实际做到这一点。有人可以使用this Plunker进行演示吗?

1 个答案:

答案 0 :(得分:3)

如果您有一个数组来定义排序顺序......

var desiredOrder = ["start of 2013", "end of 2013", "2014", "2015", "2016"];

...只需在indexOf函数中使用sort

var d_sequence = sequenceSet.values().sort(function(a,b){
    return desiredOrder.indexOf(a) - desiredOrder.indexOf(b) 
});

以下是更新的plunker:http://plnkr.co/edit/k09pL2VingV7Ipmwbqh3?p=preview