2013-10-25 37 views
2

這裏有一個的jsfiddle:http://jsfiddle.net/pingin/W7Zwg/d3.js - 從2維數組創建HTML表,但不包括第一個內部數組?

我有一個靜態的2維數組是這樣的:

var testData = [ 
    ["a","a","a","a"], 
    ["b","b","b","b"], 
    ["c","c","c","c"], 
    ["d","d","d","d"] 
] 

我想創建此數組中的表,但我要排除的第一內陣列[「一「,」a「,」a「,」a「](假設它包含標題信息)。所以,我有以下代碼:

// first create the table rows (3 needed) 

var tr = d3.select("#results").append("table").append("tbody").selectAll("tr") 
     .data(testData, function(d,i){ 
     if (i > 0) { // don't need the first row 
      return d; 
     } 
     }) 
     .enter() 
     .append("tr"); 


// Now create the table cells 

var td = tr.selectAll("td") 
     .data(function(d) {return d; }) 
     .enter() 
     .append("td") 
     .text(function(d) {return d;}); 

我很期待在這之後看到的是一張桌子或多或少是這樣的:

b b b b 
c c c c 
d d d d 

相反,我所得到的是:

a a a a 
b b b b 
c c c c 
d d d d 

如果我改變了初始數據綁定的條件:

if (i > 0) { // don't need the first row 

到:

if (i > 1) { // don't need rows 1 or 2 

然後將生成的表是:

a a a a 
c c c c 
d d d d 

似乎什麼奇怪的是是,如果我改變的條件:

if (i === 3) { // just take the last row 

的結果是:

a a a a 
d d d d 

第一行似乎總是與數據綁定,而與鍵功能無關。我究竟做錯了什麼?

非常感謝,

大衛

回答

2

試試這個:

var tr = tbody.selectAll("tr") 
     .data(testData.filter(function(d,i){ 
     if (i > 0) { // don't need the first row 
      return d; 
     }})) 
     .enter() 
     .append("tr"); 

Here的演示。

+0

謝謝亞歷克斯,這將工作,也許這就是這樣做,但你知道爲什麼我試圖做到這一點不工作? – pingin

+0

@pingin'data'的第二個參數是返回該數據元素的鍵的函數,而不是過濾函數。在你的情況下,而不是第一個元素被濾除,第一個數據元素的鍵是未定義的。 – jtmoulia

+0

也'testData.slice(1)'會做你想做的。 – chowey