{"ScriptPreparationCode":"function sortString(a, b) {\r\n const upperA = a.toUpperCase();\r\n const upperB = b.toUpperCase();\r\n\r\n if (upperA \u003C upperB) {\r\n return -1;\r\n } else if (upperA \u003E upperB) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\nfunction stableSort(values, compareFunc) {\r\n const valuesAndIndices = values.map((value, index) =\u003E [value, index]);\r\n const sortedValuesAndIndices = valuesAndIndices.sort(\r\n ([value1, index1], [value2, index2]) =\u003E {\r\n const comparison = compareFunc(value1, value2);\r\n if (comparison !== 0) {\r\n return comparison;\r\n } else {\r\n return index1 - index2;\r\n }\r\n }\r\n );\r\n sortedValuesAndIndices.forEach(([value, origIndex], index) =\u003E {\r\n values[index] = value;\r\n });\r\n return values;\r\n}\r\n\r\nfunction stableNumberSort(items, fieldName) {\r\n return stableSort(\r\n items,\r\n (item1, item2) =\u003E item1[fieldName] - item2[fieldName]\r\n );\r\n}\r\n\r\nconst locations = [{\r\n \u0022value\u0022: \u0022AF\u0022,\r\n \u0022label\u0022: \u0022Afghanistan\u0022,\r\n \u0022unit\u0022: \u0022country\u0022\r\n },\r\n {\r\n \u0022value\u0022: \u0022AR\u0022,\r\n \u0022label\u0022: \u0022Argentina\u0022,\r\n \u0022unit\u0022: \u0022country\u0022\r\n },\r\n {\r\n \u0022value\u0022: \u0022522\u0022,\r\n \u0022label\u0022: \u0022Columbus, GA\u0022,\r\n \u0022unit\u0022: \u0022dma\u0022\r\n },\r\n {\r\n \u0022value\u0022: \u0022KY\u0022,\r\n \u0022label\u0022: \u0022Cayman Islands\u0022,\r\n \u0022unit\u0022: \u0022country\u0022\r\n },\r\n {\r\n \u0022value\u0022: \u0022AO\u0022,\r\n \u0022label\u0022: \u0022Angola\u0022,\r\n \u0022unit\u0022: \u0022country\u0022\r\n },\r\n {\r\n \u0022value\u0022: \u0022AG-03\u0022,\r\n \u0022label\u0022: \u0022Antigua and Barbuda, Parish of Saint George\u0022,\r\n \u0022unit\u0022: \u0022region\u0022\r\n },\r\n {\r\n \u0022value\u0022: \u0022AE-AZ\u0022,\r\n \u0022label\u0022: \u0022United Arab Emirates, Abu Dhabi\u0022,\r\n \u0022unit\u0022: \u0022region\u0022\r\n },\r\n {\r\n \u0022value\u0022: \u0022821\u0022,\r\n \u0022label\u0022: \u0022Bend, OR\u0022,\r\n \u0022unit\u0022: \u0022dma\u0022\r\n },\r\n {\r\n \u0022value\u0022: \u0022AL-02\u0022,\r\n \u0022label\u0022: \u0022Albania, Qarku i Durresit\u0022,\r\n \u0022unit\u0022: \u0022region\u0022\r\n },\r\n {\r\n \u0022value\u0022: \u0022757\u0022,\r\n \u0022label\u0022: \u0022Boise, ID\u0022,\r\n \u0022unit\u0022: \u0022dma\u0022\r\n }\r\n]\r\n\r\nfunction itself () {\r\n return locations\r\n}\r\n\r\nfunction sortWithLodash() {\r\n const testSort = locations.reduce((acc, next) =\u003E {\r\n acc[next.unit].push(next)\r\n return acc\r\n }, {\r\n country: [],\r\n region: [],\r\n dma: []\r\n })\r\n\r\n const sortedCountry = _.sortBy(testSort.country, \u0027label\u0027)\r\n const sortedRegion = _.sortBy(testSort.region, \u0027label\u0027)\r\n const sortedDma = _.sortBy(testSort.dma, \u0027label\u0027)\r\n return sortedCountry.concat(sortedRegion).concat(sortedDma);\r\n}\r\n\r\nfunction anotherSort() {\r\n const collection = {\r\n country: [],\r\n region: [],\r\n dma: []\r\n }\r\n \r\n locations.forEach(location =\u003E {\r\n collection[location.unit].push(location)\r\n })\r\n\r\n const a = stableSort(collection.country, (item1, item2) =\u003E\r\n sortString(item1.label, item2.label)\r\n );\r\n const b = stableSort(collection.region, (item1, item2) =\u003E\r\n sortString(item1.label, item2.label)\r\n );\r\n const c = stableSort(collection.dma, (item1, item2) =\u003E\r\n sortString(item1.label, item2.label)\r\n );\r\n return [...a, ...b, ...c]\r\n}\r\n","TestCases":[{"Name":"Itself","Code":"itself();","IsDeferred":false},{"Name":"sorted","Code":"sortWithLodash();","IsDeferred":false},{"Name":"stableSort","Code":"anotherSort();","IsDeferred":false}]}