// WebAppレイヤ(レイヤー固有UI)のフォームの設定値をキャプチャし、再現可能にする // レジューム機能やパーマリンク機能をさらに高機能なものにすること、高度なオートパイロットを実現することなどを想定した機能 // https://www.google.com/search?q=javascript+longest+common+substring // https://stackoverflow.com/questions/47884388/how-to-get-longest-substring-from-array-of-strings-using-javascript //https://www.geeksforgeeks.org/longest-common-substring-dp-29/ function commonSubsequence(array){ let sortedArray = array.sort(); let first = sortedArray[0]; let last = sortedArray.pop(); let length = first.length; let index = 0; while(indexArray(n + 1).fill(0)); // To store length of the longest // common substring var result = 0; // Following steps build // LCSuff[m+1][n+1] in bottom up fashion for (i = 0; i <= m; i++) { for (j = 0; j <= n; j++) { if (i == 0 || j == 0) LCStuff[i][j] = 0; else if (X[i - 1] == Y[j - 1]) { LCStuff[i][j] = LCStuff[i - 1][j - 1] + 1; result = Math.max(result, LCStuff[i][j]); } else LCStuff[i][j] = 0; } } return result; } // Driver Code var X = "OldSite:GeeksforGeeks.org"; var Y = "NewSite:GeeksQuiz.com"; var m = X.length; var n = Y.length; document.write("Length of Longest Common Substring is " + LCSubStr(X, Y, m, n)); // This code contributed by Rajput-Ji https://stackoverflow.com/questions/47884388/how-to-get-longest-substring-from-array-of-strings-using-javascript var lcs = function (n, m) { let lcs = 0 //to store longest common substring let s1 = n.length let s2 = m.length var sp=0; for(let i = 0;i < s1;i++){ for(let j = 0; j< s2;j++){ let track = 0 var ssp = j //if letter are same, do while to check next letter if(n[i] == m[j]){ while(i + track < s1 && j + track < s2 && n[i + track] == m[j + track]){ track += 1 // to track if (lcs < track) { lcs += 1 sp = ssp; } } } } } console.log(sp,lcs, m.substring(sp,sp+lcs)); return lcs; }; 2023.8.30 レイヤーON初期の状態を記録し、それに対してのdifを得るようにすればオブジェクトサイズが小さくなるかも レイヤONしててもLayerUIがONになってないケースがあるので、レイヤUIが起動した直を取キャプチャする必要がある LayerUI ONで処理が落ち着いたことをチェックするのには"zoomPanMapCompleted"イベントを使う difは、customLayerMaagerが参考になるかもだが、もっと純粋なもので良いようにも思う。ただ構造限定の最小化がありそう https://zenn.dev/fizumi/scraps/a663605958d0ce https://github.com/flitbit/diff https://github.com/cosmicanant/recursive-diff レイヤON直後 ifp = fp.getVisibleLayersFormsParams(); いろいろ設定後 pfp = fp.getVisibleLayersFormsParams(); df0 = DeepDiff.diff(ifp,pfp) > flitbit/diff df1 = recursiveDiff.getDiff(ifp,pfp) // こっちのほうが良いかも > recursive-diff こんなデータになる 公共施設(サブレイヤ有) [ {"op":"update","path":["公共施設(サブレイヤ有)",47,"checked"],"val":false}, {"op":"update","path":["公共施設(サブレイヤ有)",48,"checked"],"val":true}, {"op":"update","path":["公共施設(サブレイヤ有)",49,"checked"],"val":true}, {"op":"update","path":["公共施設(サブレイヤ有)",50,"checked"],"val":true} ] とか J-RISQ地震速報(防災科研) [ {"op":"update","path":["J-RISQ地震速報(防災科研)",1,"value"],"val":"2011"}, {"op":"update","path":["J-RISQ地震速報(防災科研)",1,"selectedIndex"],"val":12}, {"op":"update","path":["J-RISQ地震速報(防災科研)",2,"value"],"val":"2"}, {"op":"update","path":["J-RISQ地震速報(防災科研)",2,"selectedIndex"],"val":2}, {"op":"update","path":["J-RISQ地震速報(防災科研)",4,"value"],"val":"20110311144626,0001,00001"}, {"op":"update","path":["J-RISQ地震速報(防災科研)",4,"selectedIndex"],"val":84} ]