- Notifications
You must be signed in to change notification settings - Fork 493
Open
Description
node @v4.4.7
jsondiffpatch @0.1.43
while taking diff for very large arrays (it could contain more than 5k objects), I encounter this error.
/Users/malhar.trivedi/node_modules/jsondiffpatch/src/filters/arrays.js:42 function matchItems(array1, array2, index1, index2, context) { ^ RangeError: Maximum call stack size exceeded at Array.matchItems [as match] (/Users/malhar.trivedi/node_modules/jsondiffpatch/src/filters/arrays.js:42:20) at backtrack (/Users/malhar.trivedi/node_modules/jsondiffpatch/src/filters/lcs.js:49:14) at backtrack (/Users/malhar.trivedi/node_modules/jsondiffpatch/src/filters/lcs.js:50:23) at backtrack (/Users/malhar.trivedi/node_modules/jsondiffpatch/src/filters/lcs.js:58:12) at backtrack (/Users/malhar.trivedi/node_modules/jsondiffpatch/src/filters/lcs.js:60:12) at backtrack (/Users/malhar.trivedi/node_modules/jsondiffpatch/src/filters/lcs.js:60:12) at backtrack (/Users/malhar.trivedi/node_modules/jsondiffpatch/src/filters/lcs.js:50:23) at backtrack (/Users/malhar.trivedi/node_modules/jsondiffpatch/src/filters/lcs.js:60:12) at backtrack (/Users/malhar.trivedi/node_modules/jsondiffpatch/src/filters/lcs.js:50:23) at backtrack (/Users/malhar.trivedi/node_modules/jsondiffpatch/src/filters/lcs.js:58:12) Here's the sample code to reproduce this error. This sample data has large array size because value of object size is relatively small. as I increase object size, I can further reduce size of array.
'use strict'; const jsondiffpatch = require('jsondiffpatch'); const options = { objectHash: function (obj) { return obj.id || JSON.stringify(obj); } }; const ARRAY_LENGTH = 7000; const seedData = { field1: 'some string data', field2: 'some another string data. Este es completa basura escrito en español', field3: 'This is a complete garbage and should not be considered even', timestamp: Date.now() }; const LARGE_STRING = 'This becomes much more larger field than it was before. It might even contain unicode characters as well \uFFFF \ This one has completely different characters than it used to before \uFFFF'; function createData(){ let result = []; for (let i=0; i < ARRAY_LENGTH; i++) { if(Math.random() > 0.5) { result.push(Object.assign({}, seedData, { timestamp: Date.now(), field1 : LARGE_STRING, field3 : LARGE_STRING })); } else { result.push(seedData); } } return result; } function testForLargeArray () { let largeArray1 = createData(); let largeArray2 = createData(); let differ = jsondiffpatch.create(options); let diff = differ.diff(largeArray1, largeArray2); } testForLargeArray(); Metadata
Metadata
Assignees
Labels
No labels