0

次のように、既存のテーブルを反復処理することによって収集されたデータの配列があります。

    ---------------
    Mon | Hot  | 12 
    ---------------
    Tue | Cold | -2 
    ---------------
    Wed | Warm | 3  
    ---------------
    Thu | Cold | -4 
    ---------------
    Fri | Cold | -3 
    ---------------

配列内のデータは次のように格納されます: ['Mon', 'Hot', '12', 'Tue', 'Cold', '-2' .. etc ..]

次のようにデータが表示されるように、行と列を反転したテーブルにデータを表示する必要があります。

Mon | Tue  | Wed  | Thu  | Fri
-------------------------------
Hot | Cold | Warm | Cold | Cold
-------------------------------
12  | -2   | 2    | -4   | -3

データを正しく出力するための適切なループ ステートメントを見つけるのに苦労しています。

これまでのところ、次のものがあります。

for (i = 0; i < weather_data.length; i++)
{                                                        
    if (i%5==0)
    {
        table.push('<tr><td>'+weather_data[i*3]+'</td>');
    }
    else if(i%4==0)
    {
        table.push('<td>'+weather_data[i*3]+'</td></tr>');
    }
    else
    {
        table.push('<td>'+weather_data[i*3]+'</td>');
    }
}

これは一番上の行を正しく表示しますが、呼び出されたインデックスが明らかに配列に対して大きすぎるため、残りはすべて未定義です。2 番目の行で次のインデックスを呼び出す必要が((index-5)*3)+1あることがわかりました:手術!

結果のテーブルには、次の順序でインデックスを表示する必要があります。

0   3   6   9   12
1   4   7   10  13
2   5   8   11  14

したがって、ループはこれらを左から右の順に生成し、次に次の行などを生成する必要があります。

<tr>~必要な開始タグとタグもそれぞれ追加する必要があり</tr>ます。

4

1 に答える 1

3
var data = ['Mon', 'Hot', '12', 'Tue', 'Cold', '-2', 
            'Wed', 'Warm', '3', 'Thu', 'Cold', '-4'];
var width = 3;
var height = data.length / width;
var r = "";
for(var i = 0; i < width; i++) {
  var row = [];
  for(var j = 0; j < height; j++) {
    row.push("<td>" + data[j * width + i] + "</td>");
  }
  r += "<tr>" + row.join("") + "</tr>";
}  

$("#container_id").html("<table>" + r + "</table>");
于 2012-07-07T19:34:55.050 に答える