2013-02-25 80 views
1

我有一個數組有兩個維度,我循環創建一個表。例如: 假設我有array[y][x]。數組[0][x]將填充標題列,array[1][x]將創建第二列等。 y代表每個類別/行。這是一個有點混亂,所以這裏有一個圖:Javascript:我需要有一個If語句,它有一個條件變量(For循環內If語句?)

[0][0]Device | [1][0] Device 1 | [2][0] Device 3 | [3][0] Device 1(Duplicate) 
-------------------------------------------------------------------------------- 
[0][1]category1 | [1][1]   | [2][1]   | [3][1] 
-------------------------------------------------------------------------------- 
[0][2]Category2 | [1][2]   | [2][2]   | [3][2] 

我在[y][1]檢查中的每一列重複,如果有在array[y][1]重複,我不想打印列在所有。

我正在用兩個嵌套for循環打印每個列和行。

// for every named field, generate a row for each disk 
//x represents each table category, which is in rows 
for (var x = 0; x < array[0].length; x++) { 
    // code to print table with field_names[0][x] 
    for (var y = 1; y < (array.length); y++) { 
     new_row += "<td>" + [array[y][x]]; 
    } 
} 

我的當前的想法是每一個進程到達陣列[Y] [1]我需要檢查它是否爲先前的列[Y-1] [1],[Y-2的值相匹配的時間] [1],[y-3] [1]等等,因爲我只想打印表格列的第一個實例。所以我基本上在尋找一種方法來製作一個或者一個循環,而這個循環不會在打印狂熱的時候出現,並且多次打印我所有的表格。在僞代碼中,我需要的是:

if array[y][1] == array[i][1] where (i = (y - 1); i > 0; i--),然後不打印列。

唯一的問題是每次我嘗試定義i時,它會將其餘的代碼影響到我打印一堆東西的地方,因爲所有東西都是如此嵌套的。請幫忙!並非常感謝你。

+0

爲每一行的屬性都是以前看過的值創建一個對象。然後在顯示列之前檢查屬性是否存在。 – Barmar 2013-02-25 18:52:36

+0

您應該將數組轉換爲基於行的數組。這使得它更具有內存效率,並且您可以輕鬆地[從中刪除重複項](http://stackoverflow.com/q/1960473/1048572) – Bergi 2013-02-25 19:57:03

回答

1

你在你的想法段落中寫下了答案。檢查if它匹配if它然後不打印。

for(var y = 1; y< array.length; y++){ 
    for(var x = 0; x < array[0].length; x++){ 
     for(var i = array[0].length; ; i--){ 
      if(array[y][i] == array[y][x]){ 
       //don't print! 
      }else{  
       //print! 
      } 
     } 
    } 
} 

這不是最好的表現,但它會確保你不打印任何重複。我會研究@barmar建議哪些是爲每一行創建一個對象。但是,如果你不想那麼你應該能夠實現上述做你想做的。

0

在打印之前,迭代每行記錄第一次出現的值。每當你看到這個記錄不是新的時候,不要打印它。

var found, aux; 
for(var y = 1; y < array.length; y++) { 

    aux = {}; 

    for(var x = 0; x < array[0].length; x++) { 

     found = false; 

     for (var i = 0; i < aux.length; i++) { 
      if (aux[i] == array[y][x]) { found = true; break; } 
     } 

     if (!found) { 
      aux.push(array[y][x]); 
      //render 
     } 

    } 
} 

不就是有效的,但是......

希望我幫助。