{"ScriptPreparationCode":"var sortDirections = {\r\n DEFAULT: -1,\r\n ASC: 1,\r\n DESC: -1,\r\n};\r\n\r\nvar numberArrayToSort = [1, 4, 3, 2, 5, 6, 9, 10, 5, 8, 7];\r\nvar momentArrayToSort = numberArrayToSort.map((value) =\u003E moment(value));\r\nconsole.log(momentArrayToSort[1].isBefore);\r\nvar decimalArrayToSort = numberArrayToSort.map((value) =\u003E new Decimal(value));\r\nconsole.log(decimalArrayToSort);\r\n\r\nvar compare = (lessThan, equalTo) =\u003E {\r\n if (lessThan) {\r\n return -1;\r\n } else if (equalTo) {\r\n return 0;\r\n }\r\n\r\n return 1;\r\n};\r\n\r\nvar primitiveTypeComparator = (a, b) =\u003E compare(a \u003C b, a === b);\r\n\r\nvar genericComparator = (comparator = primitiveTypeComparator) =\u003E (a, b) =\u003E {\r\n return comparator(a, b);\r\n};\r\nvar genericDirectionComparator = (comparator = primitiveTypeComparator) =\u003E (a, b, direction = sortDirections.ASC) =\u003E {\r\n return direction * comparator(a, b);\r\n};\r\nvar genericHoistDirectionComparator = (comparator = primitiveTypeComparator, direction = sortDirections.ASC) =\u003E (a, b) =\u003E {\r\n return direction * comparator(a, b);\r\n};\r\n\r\nvar sortByNumberComparator = genericDirectionComparator();\r\n\r\nvar sortByDecimalComparator = genericDirectionComparator(\r\n (decimalA, decimalB) =\u003E compare(decimalA.lessThan(decimalB), decimalA.equals(decimalB))\r\n);\r\n\r\nvar sortByMomentComparator = genericDirectionComparator(\r\n (momentA, momentB) =\u003E compare(momentA.isBefore(momentB), momentA.isSame(momentB))\r\n);","TestCases":[{"Name":"Number, many functions","Code":"numberArrayToSort.sort((a, b) =\u003E sortByNumberComparator(a, b, sortDirections.ASC));","IsDeferred":false},{"Name":"Number, straight","Code":"numberArrayToSort.sort((a, b) =\u003E (a - b))","IsDeferred":false},{"Name":"Number, straight, with direction","Code":"numberArrayToSort.sort((a, b) =\u003E a === b ? 0 : a \u003C b ? -1 : 1)","IsDeferred":false},{"Name":"Number, many functions, no direction","Code":"genericComparator()(numberArrayToSort);","IsDeferred":false},{"Name":"Number, many functions, no lookup direction","Code":"genericHoistDirectionComparator()(numberArrayToSort);","IsDeferred":false},{"Name":"Number, straight, with Enum Direction","Code":"numberArrayToSort.sort((a, b) =\u003E a === b ? 0 : a \u003C b ? -sortDirections.ASC : sortDirections.ASC)","IsDeferred":false},{"Name":"Number, many functions,","Code":"genericDirectionComparator()(numberArrayToSort);","IsDeferred":false},{"Name":"","Code":"var direction = sortDirections.ASC;\r\nnumberArrayToSort.sort((a, b) =\u003E a === b ? 0 : a \u003C b ? -direction : direction)","IsDeferred":false}]}