{"ScriptPreparationCode":"var data = [[1,2,3,4,5,6,7,8,9,10],[1,2,3,4,5,6,7,8,9,10],[1,2,3,4,5,6,7,8,9,10],[1,2,3,4,5,6,7,8,9,10]]\r\n","TestCases":[{"Name":"npm:fast-cartesian","Code":"// Does a cartesian product on several arrays.\r\n// Returns an array with the results.\r\n// Optimized to be the fastest implementation in JavaScript.\r\nfunction fastCartesian(arrays) {\r\n \r\n if (arrays.length === 0) {\r\n return []\r\n }\r\n\r\n const loopFunc = getLoopFunc(arrays.length)\r\n const result = []\r\n loopFunc(arrays, result)\r\n return result\r\n}\r\n\r\nconst getLoopFunc = function (length) {\r\n const cachedLoopFunc = cache[length]\r\n\r\n if (cachedLoopFunc !== undefined) {\r\n return cachedLoopFunc\r\n }\r\n\r\n const loopFunc = mGetLoopFunc(length)\r\n // eslint-disable-next-line fp/no-mutation\r\n cache[length] = loopFunc\r\n return loopFunc\r\n}\r\n\r\nconst cache = {}\r\n\r\n// Create a function with \u0060new Function()\u0060 that does:\r\n// function(arrays, results) {\r\n// for (const value0 of arrays[0]) {\r\n// for (const value1 of arrays[1]) {\r\n// // and so on\r\n// results.push([value0, value1])\r\n// }\r\n// }\r\n// }\r\nconst mGetLoopFunc = function (length) {\r\n const indexes = Array.from({ length }, getIndex)\r\n const start = indexes\r\n .map((index) =\u003E \u0060for (const value${index} of arrays[${index}]) {\u0060)\r\n .join(\u0027\\n\u0027)\r\n const middle = indexes.map((index) =\u003E \u0060value${index}\u0060).join(\u0027, \u0027)\r\n const end = \u0027}\\n\u0027.repeat(length)\r\n\r\n // eslint-disable-next-line no-new-func\r\n return new Function(\r\n \u0027arrays\u0027,\r\n \u0027result\u0027,\r\n \u0060${start}\\nresult.push([${middle}])\\n${end}\u0060,\r\n )\r\n}\r\n\r\nconst getIndex = function (value, index) {\r\n return String(index)\r\n}\r\nconst product = fastCartesian(data)","IsDeferred":false},{"Name":"native .reduce() with flatmap, concat","Code":"const cartesianProduct = (...allEntries) =\u003E allEntries.reduce(\r\n (subsetsSoFar, entries) =\u003E [\r\n ...subsetsSoFar.flatMap((result) =\u003E entries.map((entry) =\u003E result.concat([entry]))),\r\n ],\r\n [[]]\r\n )\r\nconst product2 = cartesianProduct(data)","IsDeferred":false},{"Name":"native .reduce() with map, spread","Code":"function cartesianProductWithSpread(...allEntries) {\r\n return allEntries.reduce(\r\n (results, entries) =\u003E\r\n results\r\n .map(result =\u003E entries.map(entry =\u003E [...result, entry] ))\r\n .reduce((subResults, result) =\u003E [...subResults, ...result] , []), \r\n [[]]\r\n )\r\n}\r\nconst product3 = cartesianProductWithSpread(data)","IsDeferred":false},{"Name":"cartesian from https://stackoverflow.com/a/43053803","Code":"const cartesian = (...a) =\u003E {\r\n console.log(a)\r\n return a.reduce((a, b) =\u003E a.flatMap(d =\u003E {\r\n // console.log(b)\r\n return b.map(e =\u003E [d, e].flat())\r\n }))}","IsDeferred":false}]}