OK、2 つのデータベースを比較し、HTML の相違点のレポートを出力するこの SQL 比較ツールがあります。作成された JavaScript を解析して、違いの詳細を調べる必要があります。たとえば、変更されたストアド プロシージャが 500 件表示されている場合、誰がいつ変更したかでフィルター処理することはできません。しかし、JS を解析できれば、そのような基準に基づいてフィルタリングできます。ただし、それらの JS 構造はかなり複雑で、主に入れ子になった配列であり、4 レベルの深さになることもあります。以下は、4 つの異なるレコードを示すサンプルです。
var createsql  = new Array(
new Array(new Array(0, "Error, No SQL Availible")),
new Array (
  new Array(0,"-- Stored Procedure", " "),
  new Array(0,"", ""),
  new Array(1,"--------------------------------------------------------------------------------------", " "),
  new Array(1,"/*", " "),
  new Array(1,"Procedure        : Schema.p_procedure1", " "),
  new Array(1,"Description       : This process will do something", " "),
  new Array(1,"Creation Date  : 11/24/2009", " "),
  new Array(1,"Created By       : John Doe", " "),
  new Array(1,"Tables Updated : None", " "),
  new Array(1,"*/", " "),
  new Array(0, "", "")
),
new Array (  
  new Array(0,"-- Stored Procedure", " "),
  new Array(0,"", ""),
  new Array(1,"--------------------------------------------------------------------------------------", " "),
  new Array(1,"/*", " "),
  new Array(1,"Procedure        : Schema.p_procedure2", " "),
  new Array(1,"Description       : This process will do something", " "),
  new Array(1,"Creation Date  : 11/24/2011", " "),
  new Array(1,"Created By       : Jane Doe", " "),
  new Array(1,"Tables Updated : None", " "),
  new Array(1,"*/", " "),
  new Array(0, "", "")
),
new Array (
  new Array(0,"-- Stored Procedure", " "),
  new Array(0,"", ""),
  new Array(1,"--------------------------------------------------------------------------------------", " "),
  new Array(1,"/*", " "),
  new Array(1,"Procedure        : Schema.p_procedure3", " "),
  new Array(1,"Description       : This process will do something", " "),
  new Array(1,"Creation Date  : 11/24/2012", " "),
  new Array(1,"Created By       : Mark Doe", " "),
  new Array(1,"Tables Updated : None", " "),
  new Array(1,"*/", " "),
  new Array(0, "", "")
)
);
このコードで配列を解析し、必要なものを取得できます
var match = "Jane Doe";
var createLength = createsql.length;
var matched;
for(var i = 0; i < createLength; i++){
    if(typeof createsql[i] === "object"){
        var firstArrayLength = createsql[i].length;
            for(var j = 0; j < firstArrayLength; j++){
                if(typeof createsql[i][j] === "object"){
                    var secondArrayLength = createsql[i][j].length;
                        for(var k = 0; k < secondArrayLength ; k++){
                            if(typeof createsql[i][j][k] === 'string'){
                                if((createsql[i][j][k].indexOf(match) != -1)){
                                    console.log(createsql[i][j][k]);
                                    console.log('matched');
                                    //need to grab the parent and search its elemets for the one that starts with the word "Procedure"
                                }
                            }
                        } 
                }
            }    
    }
}
しかし、私が立ち往生しているのは、現在いる配列の親を取得するにはどうすればよいですか? たとえば、検索文字列が の場合、兄弟配列の 2 番目の要素であるJane Doe要素を取得したいと考えています。"Procedure        : Schema.p_procedure2"私を撃たないでください!
PS: ループを改善するための他の提案は大歓迎です。これは単なるサンプルであり、リストはもっと大きくなる可能性があります。