【问题标题】:D3 Nest - Sorting ValuesD3 Nest - 排序值
【发布时间】:2017-02-12 18:07:42
【问题描述】:

我正在尝试使用 D3.nest() 按键和值对数据集进行排序,两者都根据自定义的数组顺序。键排序工作没有问题,但是我无法对值进行排序。

我的自定义排序数组定义为:

var priority_source_order = ["Biological","Water","Sediment","Eco-Fish"];
var priority_indicator_order = ["Biological Status","Water Quality Index","Phosphorus","Nitrogen","Dissolved Oxygen","Water Clarity","Chlorophyll a","Sediment Quality Index","Sediment Contaminants","Sediment Toxicity","Fish Quality Index"];

.sortKeys 方法工作正常,但我无法对值进行排序。这可能是因为在 D3.nest() 创建的“值”键中嵌套了多个键/值对,并且该函数不知道需要对哪个键进行排序。这是我的代码:

var final_data = d3.nest()
            .key(function(d) { 
                return d[ncca_ce_source];
            })
            .sortKeys(function(a,b) { 
                return priority_source_order.indexOf(a) - priority_source_order.indexOf(b); 
            })
            .sortValues(function(a,b) { 
                return priority_indicator_order.indexOf(a) - priority_indicator_order.indexOf(b); 
            })
            .entries(cond_est_data);

我的数据目前看起来像:

[
 {
  "key": "Biological",
  "values": [
   {
    "Type": "National",
    "Indicator.Plain.Language": "Benthic Index"
   }
  ]
 },
 {
  "key": "Water",
  "values": [
   {
    "Type": "National",
    "Indicator.Plain.Language": "Chlorophyll a"
   },
   {
    "Type": "National",
    "Indicator.Plain.Language": "Dissolved Oxygen"
   }
  ]
 }
]

有人对如何根据 priority_indicator_order 数组的顺序对“Indicator.Plain.Language”键进行排序有任何建议吗?正如您在上面的输出中看到的那样,生物和水的“键”已正确排序。但是,“Indicator.Plain.Language”的值不符合 priority_indicator_order 数组定义的顺序。任何帮助表示赞赏!

【问题讨论】:

  • 我认为您需要重新访问三元 return (priority_indicator_order.indexOf(a) - priority_indicator_order.indexOf(b) ? 1 : -1); 我很确定这将始终返回第一个表达式 (1)。
  • 我想我需要澄清一下我的问题。马上更新。
  • 知道了,必须修改 sortValue 为: return priority_indicator_order.indexOf(a[ncca_ce_indic_plain]) - priority_indicator_order.indexOf(b[ncca_ce_indic_plain]);

标签: javascript d3.js


【解决方案1】:

通过将 .sortValues 方法修改为以下内容来解决此问题:

.sortValues(function(a,b) { 
    return priority_indicator_order.indexOf(a[ncca_ce_indic_plain]) - priority_indicator_order.indexOf(b[ncca_ce_indic_plain]); 
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2020-07-27
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多