You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I experienced too much recursion errors when trying to diff ~5+ MB JSON files.
I ended up not using jsondiffpatch, but I am sharing my experiments below in the hope they would be found useful.
I think the error is caused by the LCS algorithm, and I attempted the following approach that seemed to work. However please note that it has not been tested, and in particular I am not sure if indices1 and indices2 are set properly.
// Adapted from http://rosettacode.org/wiki/Longest_common_subsequence#Dynamic_Programming_4functionlcs(x,y,match,ctx){varm=x.length;varn=y.length;// Build the c-table.vari,j,row=[],c=[],left,diag,latch;for(j=0;j<n;row[j++]=0);for(i=0;i<m;i++){c[i]=row=row.slice();for(diag=0,j=0;j<n;j++,diag=latch){latch=row[j];if(match(x,y,i,j,ctx)){row[j]=diag+1;}else{left=row[j-1]||0;if(left>row[j]){row[j]=left;}}}}i--,j--;// row[j] now contains the length of the lcs.// Recover the lcs from the table.varsequence=[],indices1=[],indices2=[];while(i>-1&&j>-1){switch(c[i][j]){default:
j--;sequence.unshift(x[i]);indices1.unshift(i);// ?indices2.unshift(j);// ?case(i&&c[i-1][j]):
i--;continue;case(j&&c[i][j-1]):
j--;}}return{ sequence, indices1, indices2 };}
The above function is to be called as follows. It makes unnecessary all the other functions in this file but defaultMatch:
--- jsondiffpatch/src/filters/lcs.js+++ jsondiffpatch/src/filters/lcs.js@@ -63,8 +63,8 @@
var get = function(array1, array2, match, context) {
context = context || {};
- var matrix = lengthMatrix(array1, array2, match || defaultMatch, context);- var result = backtrack(matrix, array1, array2, array1.length, array2.length, context);+ match = match || defaultMatch;+ var result = lcs(array1, array2, match, context);
if (typeof array1 === 'string' && typeof array2 === 'string') {
result.sequence = result.sequence.join('');
}
The text was updated successfully, but these errors were encountered:
I experienced
too much recursion
errors when trying to diff ~5+ MB JSON files.I ended up not using jsondiffpatch, but I am sharing my experiments below in the hope they would be found useful.
I think the error is caused by the LCS algorithm, and I attempted the following approach that seemed to work. However please note that it has not been tested, and in particular I am not sure if
indices1
andindices2
are set properly.The above function is to be called as follows. It makes unnecessary all the other functions in this file but
defaultMatch
:The text was updated successfully, but these errors were encountered: