0

SO で見つけたこの便利なJson-to-HTML-Tableスクリプトから取得した出力テーブルを変更しようとしています。json-to-table.jsが JSON オブジェクトを渡し、テーブル ヘッダーとして使用される配列キーを生成するポイント (86 行目) があります。オプションで、このarray_key関数は、search_value渡された指定されたパラメーターに対して 1 つのキーのみを生成できます。ただし、一致しないすべての配列キーsearch_valueが返されるように、それを変更しようと[試みました]。変更後の関数は次のとおりです。

function array_keys(input, search_value, argStrict)
{
    var search = typeof search_value !== 'undefined', tmp_arr = [], strict = !!argStrict, include = '', key = '';

    if (input && typeof input === 'object' && input.change_key_case) { // Duck-type check for our own array()-created PHPJS_Array
        return input.keys(search_value, argStrict);
    }

    for (key in input)
    {
        if (input.hasOwnProperty(key))
        {
            include = false;
            if (search)
            {
                if (strict && input[key] == search_value)
                    include = false;
                else if (input[key] == search_value)
                    include = false;
                else
                    include = true;
            } 
            if (include)
                tmp_arr[tmp_arr.length] = key;
        }
    }
    return tmp_arr;
}

これを行った理由は、生成されたテーブルに JSON オブジェクトの特定の列を含めないようにするためです。

{
    "examItemCategories": [
        {
            "catgoryName": "01-Normal processes",
            "catgoryPath": "General Area\\01-Normal processes",
            "numberOfItems": 2,
            "percentage": "6.06"
        }
    ]
}

渡された元の JSON obj を変更できないため、作成後にテーブルを変更するか (たとえば、列を削除するか)、または作成中に変更するかどうかを決定していました。関数を見た後array_keys、 の条件チェックを簡単に反転できると感じましたsearch_value

array_keys(parsedJson[0], 'catgoryPath');json-to-table スクリプトから呼び出すようになりました。(はい、catgoryPathは正しいスペルの名前です (笑))。次に、関数内の for ループにブレーク ポイントを設定しarray_keysて、Firebug でそれを追跡します。

最初の反復:catgoryNameが に追加されtmp_arr、2 番目の反復:catgoryPathtmp_arr... に追加され、3 回目と 4 回目の反復が続きます。catgoryPath追加したくない。

スクリプト デバッガーを見ると、2 回目の反復で、追加されるかどうかcatgoryPathは conditional:else if (input[key] == search_value)行に帰着します。問題は、Firebug によると、それぞれの反復でkeysearch_value変数の両方が「catgoryPath」に等しいということです。したがって、include = false;正しい発砲を行う必要がありますか?

インラインコードの長さと自由な使用についてお詫び申し上げます。

4

1 に答える 1