{"ScriptPreparationCode":"window.users = [\r\n { name: \u0027\u0412\u0430\u043D\u044F\u0027, level: \u00273\u0027 },\r\n { name: \u0027\u0421\u0430\u0448\u0430\u0027, level: \u00271\u0027 },\r\n { name: \u0027\u041C\u0430\u0448\u0430\u0027, level: \u00272\u0027 },\r\n { name: \u0027\u041D\u0438\u043A\u0430\u0027, level: \u00273\u0027 },\r\n { name: \u0027\u0412\u0435\u0440\u0430\u0027, level: \u00271\u0027 },\r\n { name: \u0027\u0421\u0430\u0448\u0430\u0027, level: \u00272\u0027 },\r\n { name: \u0027\u0412\u0430\u043D\u044F\u0027, level: \u00272\u0027 }\r\n];\r\n\r\nwindow.sortBy = (key) =\u003E {\r\n return (a, b) =\u003E (a[key] \u003E b[key]) ? 1 : ((b[key] \u003E a[key]) ? -1 : 0);\r\n};\r\n\r\nfunction insertionSort(array, fieldName) {\r\n let { length } = array, items = [];\r\n let i, j, current;\r\n while (length--) {\r\n items[length] = array[length];\r\n }\r\n\r\n for (i = 1; i \u003C length; i\u002B\u002B) {\r\n current = items[i];\r\n j = i;\r\n while (j \u003E 0 \u0026\u0026 getItem(items[j - 1], fieldName) \u003E getItem(current, fieldName)) {\r\n items[j] = items[j - 1];\r\n j--;\r\n }\r\n items[j] = current;\r\n }\r\n return items;\r\n}\r\n\r\nfunction getItem(item, fieldName) {\r\n if (fieldName) {\r\n item = item[fieldName]\r\n }\r\n return item;\r\n}","TestCases":[{"Name":"Underscore sortBy()","Code":"_.sortBy(users, \u0027name\u0027)","IsDeferred":false},{"Name":"Vanilla sort()","Code":"users.sort(sortBy(\u0022name\u0022));","IsDeferred":false},{"Name":"Vanilla CUSTOM sort method","Code":"insertionSort(users, \u0022name\u0022);","IsDeferred":false},{"Name":"localeCampare","Code":"users.sort((a, b) =\u003E a.name.localeCompare(b.name));","IsDeferred":false}]}