Ich versuche, ein Dataset nach D3.nest() mit Schlüssel und Wert zu sortieren, beides gemäß einer benutzerdefinierten Array-Reihenfolge. Die Schlüsselsortierung funktioniert ohne Problem, aber das kann ich aber nicht sortieren.D3 Nest - Sortieren von Werten
Meine benutzerdefinierte Sortierung Arrays sind definiert als:
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"];
Die .sortKeys Methode funktioniert gut, aber ich bin nicht in der Lage, die Werte zu sortieren. Dies liegt wahrscheinlich daran, dass mehrere Schlüssel/Wert-Paare innerhalb des Schlüssels "values" verschachtelt sind, den D3.nest() erstellt, und die Funktion weiß nicht, welcher Schlüssel sortiert werden muss. Hier ist mein Code:
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);
Meine Daten sehen derzeit wie:
[
{
"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"
}
]
}
]
Hat jemand irgendwelche Ratschläge, wie man auf dem „Indicator.Plain.Language“ Schlüssel zu sortieren, nach der Reihenfolge der priority_indicator_order-Array? Wie Sie anhand der obigen Ausgabe sehen können, wird der "Schlüssel" für Biologisch und Wasser richtig sortiert. Die Werte für "Indicator.Plain.Language" sind jedoch nicht in der vom Array priority_indicator_order definierten Reihenfolge. Jede Hilfe wird geschätzt!
Ich glaube, Sie brauchen das ternäre 'return (priority_indicator_order.indexOf (a) zu überdenken - priority_indicator_order.indexOf (b) 1?: -1); 'Ich bin mir ziemlich sicher, dass dies immer den ersten Ausdruck (1) zurückgibt. –
Ich denke, ich muss meine Frage ein wenig klären. Ich werde jetzt updaten. – thefreeline
Bekam, musste den sortValue ändern zu: return priority_indicator_order.indexOf (a [ncca_ce_indic_plain]) - priority_indicator_order.indexOf (b [ncca_ce_indic_plain]); – thefreeline