1

テーブルを作成するためにループしている2次元の配列があります。例: 私が を持っているとしましょうarray[y][x]。配列[0][x]はヘッダー列に入力array[1][x]され、2 番目の列が作成されます。y は各カテゴリ/行を表します。少しややこしいので、図にすると次のようになります。

[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]その列をまったく印刷したくありません。

ネストされた 2 つの 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]];
    }
}

私の現在の考えは、プロセスが array[y][ 1 ] に到達するたびに、前の列 [y-1][ 1 ]、[y-2][ 1 ]、[y] の値と一致するかどうかを確認する必要があるということです。 -3][ 1 ] など、テーブル列の最初のインスタンスのみを出力したいためです。したがって、私は基本的に、印刷の熱狂に陥らず、すべてのテーブルを複数回印刷しない for または while ループを作成する方法を探しています。疑似コードでは、次のことが必要です。

if array[y][1] == array[i][1] where (i = (y - 1); i > 0; i--)、列を印刷しないでください。

唯一の問題は、i を定義しようとするたびに、すべてがネストされているため、コードの残りの部分に何度も印刷する場所に影響を与えることです。助けてください!ありがとうございました。

4

2 に答える 2

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が提案したことを検討します。ただし、そうしたくない場合は、上記を実装して、必要なことを実行できるはずです。

于 2013-02-25T19:39:28.923 に答える