2015-02-17 6 views
7

Sto usando il seguente codice per popolare i miei Combobox utilizzando d3.jsCome selezionare valori unici in d3.js dai dati

d3.csv("Results_New.txt", function(data) { 
dataset=data; 
d3.select("#road").selectAll("option") 
.data(data).enter().append("option").text(function(d){return d.roadname;}).attr("value",function(d){return d.roadname;}); 
}); 

Ci sono diversi file con lo stesso nome. La casella combinata è popolata con questi nomi duplicati. Ad esempio in più righe il nome della strada è I-80. Ma nella casella combinata voglio vedere I-80 solo una volta. Come lo posso fare?

+1

Filtrare i duplicati dai dati prima di passarlo a D3. –

+0

Come posso farlo. Sto leggendo il file CSV e utilizzando i dati letti dal file csv –

risposta

13

filtrare i dati di ritegno chiavi univoche solo da d3.map

d3.select("#road").selectAll("option") 
    .data(d3.map(data, function(d){return d.roadname;}).keys()) 
    .enter() 
    .append("option") 
    .text(function(d){return d;}) 
    .attr("value",function(d){return d;}); 
+0

d3.map (dati, funzione (d) {return d.roadname;}) non funziona. Nessun valore è ora visibile nella casella combinata –

+0

Devo eseguire un ulteriore pre-elaborazione prima di utilizzare d3.map (dati, funzione (d) {return d.roadname;}) –

+0

Ho modificato il mio codice come sopra. Dopo aver mappato i dati usando 'd3.map', viene restituita una matrice di oggetti indicizzati da' nomecannello'. L'estrazione di 'keys()' ti fornirà una lista * pulita * di roadname. – ahmohamed

-3

Prova this:

/* file.csv 
 
name_of_my_header 
 
mom 
 
dad 
 
brother 
 
sister 
 
dog 
 
*/ 
 
button.onclick = function() { 
 
    var s = d3.select("#road"); 
 
    d3.csv(prompt("URL please"), function(dataset){ 
 
     dataset.forEach(function(row) { 
 
      s.append("option").text(row["name_of_my_header"]); 
 
     }) 
 
    }) 
 
}
<select id="road"> 
 
</select> 
 
<button id="button">Is it?</button>