2017-02-12 5 views
0

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!

+0

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. –

+0

Ich denke, ich muss meine Frage ein wenig klären. Ich werde jetzt updaten. – thefreeline

+0

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

Antwort

0

dieses Fest durch die .sortValues ​​Verfahren auf die folgende Modifikation:

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