{"ScriptPreparationCode":"function getRandomInt(max) {\r\n return Math.floor(Math.random() * max);\r\n}\r\n\r\nvar itemsA = [];\r\nvar itemsB = [];\r\nfor (let i = 0; i \u003C 1000; i\u002B\u002B) {\r\n itemsA.push(getRandomInt(500));\r\n itemsB.push(getRandomInt(500));\r\n}\r\nitemsA.sort(function(a,b){ return a-b; });\r\nitemsB.sort(function(a,b){ return a-b; });\r\n\r\nfunction* sortedDifference(sortedIterableA, sortedIterableB) {\r\n let iteratorA = sortedIterableA[Symbol.iterator]();\r\n let iteratorB = sortedIterableB[Symbol.iterator]();\r\n let itemA = iteratorA.next();\r\n let itemB = iteratorB.next();\r\n while (!itemA.done) {\r\n if (itemB.done) {\r\n yield itemA.value;\r\n yield* iteratorA;\r\n return;\r\n }\r\n\r\n if (itemA.value \u003C itemB.value) {\r\n yield itemA.value;\r\n itemA = iteratorA.next();\r\n } else {\r\n if (! (itemB.value \u003C itemA.value)) {\r\n itemA = iteratorA.next();\r\n }\r\n itemB = iteratorB.next();\r\n }\r\n }\r\n}\r\n\r\nfunction difference(setA, setB) {\r\n\tlet _difference = new Set(setA)\r\n\tfor (let elem of setB) {\r\n\t\t_difference.delete(elem)\r\n\t}\r\n\treturn Array.from(_difference).sort();\r\n}\r\n\r\n","TestCases":[{"Name":"Port from C\u002B\u002B STL","Code":"let itemsC = Array.from(sortedDifference(itemsA, itemsB));","IsDeferred":false},{"Name":"Difference algorithm from MDN Set page","Code":"let itemsC = difference(itemsA, itemsB);","IsDeferred":false},{"Name":"Lodash _.difference","Code":"let itemsC = _.difference(itemsA, itemsB);","IsDeferred":false},{"Name":"Ramda R.difference","Code":"let itemsC = R.difference(itemsA, itemsB);","IsDeferred":false}]}