2016-12-24 20 views
5

Ben buna benzer birden D3 kod örnekleri bakıyorum:D3 Veri Bağlama verileri etrafında parantez koymak zaman

var data = [1,2,3...]; 
var blah = d3.selectAll("#blah").data([data]).enter()...; 

Ama bazen bu şeklinde görürsünüz:

var data = [1,2,3...]; 
var blah = d3.selectAll("#blah").data(data).enter()... 

Yazdığım tüm kodlar ikinci formdaydı ve ben hiç bir sorunum olmadı, ancak ilk örneği olan bir kod örneğini çevrim içi kopyaladım ve [] 'yi kaldırdığımda çalışmadı.

Birisi neden burada gerekli olduğunu açıklıyor ve zaten bir dizi nesnesinin etrafında parantez koymalıyız?

Teşekkürler. D3'te,

+0

Test ettiğiniz kod örneği daha eski bir d3.js sürümünü kullanıyor mu? – Mike

+1

Funny enought, ikinci örnekte ('.data (data)'), "bazen" olduğunu gördüğünüze rağmen, en yaygın olanıdır.Bir cevap verdim, ancak ekstra parantez çiftini koymanız gereken özel durumu belirtirseniz daha iyi olur, böylece size daha ayrıntılı bir açıklama verebiliriz. –

+0

Sanırım cevabınız yardımcı olur, ama örnek şu: – zachvac

cevap

6

.

  • bir fonksiyon
  • bir dizi
  • şey (bir gaz giderici olarak hareket ettiğinde): data() yöntem üç şey kabul eder.

    Çoğu durumda, sadece veri olarak ["foo", "bar", "baz"] geçirebilirsiniz: söyleniyor

, bu konudur. Yani, sahip:

var data = ["foo", "bar", "baz"]; 

Sadece yazabilirsiniz:

.data(data) 

Ancak, bazı durumlarda, bir eleman, bir üst grup verileri devralır olduğu gibi, bir sarın zorunda ekstra parantez çifti (yazdım this recent answer). Bunu yaparız çünkü alt öğe, verilerini verinin üst bilgisinin geçtiği bir işlev olarak alır.

Kontrol bu: Artık

var data = ["foo", "bar", "baz"]; 
 

 
var body = d3.select("body"); 
 

 
var divs = body.selectAll(".divs") 
 
\t .data(data) 
 
\t .enter() 
 
\t .append("div"); 
 
\t 
 
var par = divs.selectAll("p") 
 
\t .data(d => d) 
 
\t .enter() 
 
\t .append("p") 
 
\t .text(d => d);
<script src="https://d3js.org/d3.v4.min.js"></script>

, parantez fazladan bir çift ile aynı kod,:

var data = ["foo", "bar", "baz"]; 
 

 
var body = d3.select("body"); 
 

 
var divs = body.selectAll(".divs") 
 
\t .data([data]) 
 
\t .enter() 
 
\t .append("div"); 
 
\t 
 
var par = divs.selectAll("p") 
 
\t .data(d => d) 
 
\t .enter() 
 
\t .append("p") 
 
\t .text(d => d);
<script src="https://d3js.org/d3.v4.min.js"></script>

f olarak irst snippet, 3 div oluşturuldu. Her biri için, bir dize verileri, paragraflara aktarılır (d3, "foo" gibi her dizeyi ["f", "o", "o"] gibi bir dizide döndürür ve her div için 3 paragraf alırsınız).

İkinci kod parçasında yalnızca bir div yaratılır (dizinin uzunluğu yalnızca 1 olduğundan) ve tüm iç dizi (["foo", "bar", "baz"]) paragraflara iletilir.

İlgili konular