Javascript D3嵌套-排序值

Javascript D3嵌套-排序值,javascript,d3.js,Javascript,D3.js,我尝试使用D3.nest()按键和值对数据集进行排序,这两种方法都是根据自定义的数组顺序进行的。键排序没有问题,但是我无法对值进行排序 我的自定义排序数组定义为: var priority_source_order = ["Biological","Water","Sediment","Eco-Fish"]; var priority_indicator_order = ["Biological Status","Water Quality Index","Phosphorus","Nitrog

我尝试使用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()创建的“values”键中嵌套了多个键/值对,而函数不知道需要对哪个键进行排序。这是我的密码:

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"
   }
  ]
 }
]

有人对如何根据优先级指示符顺序数组对“Indicator.Plain.Language”键进行排序有什么建议吗?从上面的输出可以看出,生物和水的“键”已正确排序。但是,“Indicator.Plain.Language”的值的顺序与priority\u Indicator\u order数组定义的顺序不同。感谢您的帮助

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

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

我认为您需要重新访问三元
返回(priority\u indicator\u order.indexOf(a)-priority\u indicator\u order.indexOf(b)?1:-1)我很确定这将始终返回第一个表达式(1)。我想我需要澄清一下我的问题。现在要更新。明白了,必须将sortValue修改为:return priority\u indicator\u order.indexOf(a[ncca\u ce\u indic\u plain])-priority\u indicator\u order.indexOf(b[ncca\u ce\u indic\u plain]);