Введение
В информационных системах, ориентированных на данные, это обычный способ отобразить данные в табличной форме. Сортировка данных является важной особенностью. Сортировка может быть разделена на сортировку по одному полю и сортировки по разным направлениям сортировки нескольких полей. Сортировка с одним полем очень ограничена и не может удовлетворить потребности пользователя в изменениях в проблемах данных. Сортировка с несколькими полями может лучше восполнить этот дефект.
Сортировка с несколькими полями, метод реализации может быть разделен на реализацию на средней части и внедрение переднего уровня с большого уровня.
Сортировка бэкэнд
Сортировка реализации Back-End может быть реализована на уровне базы данных или на уровне приложения.
Очень просто реализовать многополевую сортировку на уровне базы данных. Просто используйте команду SQL Sorting Command "Порядок" - Порядок от Field1 ASC, Field2 Desc, Field3 ASC - ....
Уровень приложения относится к уровню веб-приложений (архитектура C/S здесь не обсуждается), например, PHP, Java Web, ASP.NET и т. Д. Реализация уровня приложения заключается в использовании языков сервиса, таких как PHP, Java и .NET (C#/VB) для сортировки данных. В качестве примера примером ASP.NET C#, поскольку LINQ в C# имеет встроенные операции по типам сбора и поддерживает сортировку с несколькими атрибутами, использование LINQ может легко достичь этой цели-от F в FOS ORDERY F.NAME спуска, F.NUM, утверждая SELECT F (можно обнаружить, что синтаксис сортирования LINQ почти точно такой же, как и SQL). Если другие языки не имеют встроенной поддержки, они реализованы в соответствии с алгоритмами сортировки, которые являются общим и не имеют ничего общего с языками программирования.
Сортировка фронта
В JavaScript массивы имеют метод сортировки «сортировки». Когда массив - это простой массив (элементы массива являются простыми типами - строками, значениями и логинами), этот метод может использоваться для легкого достижения цели сортировки. Однако, когда элемент массива является несмешным типом, таким как объект пары имен/значения, и вы хотите сортировать его в разных направлениях сортировки в соответствии с указанными атрибутами, простой призыв к методу «сортировки» не может достичь этого.
К счастью, метод «сортировки» оставляет за собой пользовательский интерфейс сортировки, который может реализовать желаемый метод сортировки.
Давайте посмотрим, как выглядит метод массива «сортировки».
Прототип функции сортировки
// Сортировать элементы массива на месте и вернуть этот массив. // По умолчанию сортируйте по кодовой точке Unicode строки. Array.prototype.sort ([comparefunction]: number); // номер: -1 | 0 | 1. // Типичная функция сравнения (отсортированный порядок восхождения). функция CompareFunction (item1, item2) {if (item1> item2) {return 1; // Если отсортировано в порядке убывания, верните -1. } else if (item1 === item2) {return 0;} else {return -1; // Если отсортировано в порядке убывания, верните 1.}}Примечание. Если сравнение не указана, элементы преобразуются в символы строки и сортируются в порядке бита Unicode. Например, «вишня» будет организована до «банана». При сортировке номеров 9 появятся до 80, потому что они будут сначала преобразованы в строки, а «80» опережает «9».
• Если сравнить функцию (a, b) меньше 0, то A будет расположена до B;
• Если сравнение функции (a, b) равна 0, A и B
Относительное положение остается неизменной. Примечание. Стандарты ECMASCRIPT не гарантируют такое поведение, и не все браузеры будут соответствовать им (например, Mozilla в 2003 году
версии до 2019 года);
• Если сравнить функцию (a, b) больше 0, B будет расположен до a.
• Сравнение функции (a, b) всегда должно возвращать один и тот же результат сравнения с одним и тем же входом, в противном случае отсортированный результат будет неопределенным.
ПРИМЕЧАНИЕ. Результаты сортировки, полученные вышеуказанными правилами, находятся в порядке возрастания. Если вы хотите получить нисходящий результат, вы вернете результат менее 0, когда результат сравнения больше 0. Если результат сравнения составляет менее 0, вы можете вернуть результат, превышающий 0.
Чтобы реализовать сортировку с несколькими атрибутами, ключом является сравнение реализации функций. В соответствии с вышеуказанными правилами, упорядочение нескольких атрибутов в разных направлениях осуществляется, и размер взаимосвязи между двумя элементами сравнения все еще возвращается.
Так как определить отношение размера многих объектов атрибутов? Это можно сделать в двух шагах.
Первым шагом является запись результатов, полученных путем сравнения двух элементов сортировки в соответствии с их сортировкой атрибутов и указаний.
var proporders = {"prop1": "asc", "prop2": "desc", "prop3": "asc"}; function cmp (item1, item2, proporders) {var cps = []; // используется для записи результатов сравнения каждого атрибута сортировки, -1 | 0 | 1 var isasc = true; // Сортировать направление. for (var p в пропорциях) {isasc = proporders [p] === "asc"; if (item1 [p]> item2 [p]) {cps.push (isasc? 1: -1); break; // Вы можете выпрыгнуть из петли, потому что здесь вы уже знаете, что Item1 «больше, чем item2». } else if (item1 [p] === item2 [p]) {cps.push (0);} else {cps.push (isasc? -1: 1); break; // Вы можете выпрыгнуть из петли, item1 «меньше, чем» item2. }} /* ...*/}Второй шаг состоит в том, чтобы всесторонне судить о отношениях окончательного размера двух терминов сравнения на основе результатов сравнения каждого атрибута сортировки.
/ * ... */for (var j = 0; j <cps.length; j ++) {if (cps [j] === 1 || cps [j] === -1) {return cps [j];}} return 0;С приведенной выше идеей легко реализовать всю функцию сравнения. Вот полный код JavaScript для функции сравнения:
Функция сравнения
function sortbyprops (item1, item2) {"strict"; var props = []; for (var _i = 2; _i <arguments.length; _i ++) {props [_i - 2] = Arguments [_i];} var cps = []; // Хранить результаты сравнения атрибутов сортировки. // Если атрибут сортировки не указан, сортируйте его в порядке возрастания всех атрибутов. var asc = true; if (props.length <1) {for (var p in item1) {if (item1 [p]> item2 [p]) {cps.push (1); break; // Если больше, то петля вырвается. } else if (item1 [p] === item2 [p]) {cps.push (0);} else {cps.push (-1); break; // Если это меньше, петля выпрыгнет. }}} else {for (var i = 0; i <props.length; i ++) {var prop = props [i]; for (var o in prop) {asc = prop [o] === "asc"; if (ote]> item2 [o]) {cps.push (asc? 1: -1); break; // Если больше, то петля вырвается. } else if (item1 [o] === item2 [o]) {cps.push (0);} else {cps.push (asc? -1: 1); break; // Если это меньше, петля выпрыгнет. }}}} for (var j = 0; j <cps.length; j ++) {if (cps [j] === 1 || cps [j] === -1) {return cps [j];}} return 0; }Тестовые случаи
// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- propOrders);});console.log(items);}function testAsc() {test({ "name": "asc", "value": "asc" });}function testDesc() {test({ "name": "desc", "value": "desc" });}function testAscDesc() {test({ "name": "asc", "value": "desc" });} function testDescasc () {test ({"name": "desc", "value": "asc"});} typeScript Code/**** Сортировка. */type direct = "asc" | "desc";/**** Сорт -атрибут. ** ** @Interface iPropertyRoder*/interface iPropertyOrder {[name: string]: direct;}/**** Простое имя/значение значения. ** ** @Interface isImpleObject*/interface isimpleObject {[name: string]: string | номер | Boolean;}/**** Сортировать простое имя/значение объектов в соответствии с указанным атрибутом и направлением сортировки (в соответствии с атрибутом сортировки и направлением сортировки ** сравнивает два элемента по очереди и возвращает значение, представляющее позицию сортировки). ** ** @template t простое имя/значение значения. ** @param {t} item1 Сортировка. Сравнение Item 1. ** @param {t} item2 Сортировка Сравнения. ** @returns Если пункт 1 больше, чем пункт 2, вернуть 1, если пункт 1 равен элементу 2, вернуть 0, в противном случае вернуть -1. */function sortbyprops <t Extends isimpleObject> (item1: t, item2: t, ... props: ipropertyorder []) {"strict"; var cps: массив <число> = []; // хранит результаты сравнения атрибутов сортировки. // Если атрибут сортировки не указан, сортируйте его в порядке возрастания всех атрибутов. var asc = true; if (props.length <1) {for (var p in item1) {if (item1 [p]> item2 [p]) {cps.push (1); break; // Если больше, то петля вырвается. } else if (item1 [p] === item2 [p]) {cps.push (0);} else {cps.push (-1); break; // Если это меньше, петля выпрыгнет. }}} else {// Сортировать с указанными атрибутами и направлениями подъема. for (var i = 0; i <props.length; i ++) {var prop = props [i]; for (var o in prop) {asc = prop [o] === "asc"; if (item1 [o]> item2 [o]) {cps.push (asc? 1: -1); break; // Если больше, то петля вырвается. } else if (item1 [o] === item2 [o]) {cps.push (0);} else {cps.push (asc? -1: 1); break; // Если это меньше, петля выпрыгнет. }}}} for (var j = 0; j <cps.length; j ++) {if (cps [j] === 1 || cps [j] === -1) {return cps [j];}} return 0; }Используйте сценарии и ограничения
Использование JavaScript для реализации сортировки с несколькими атрибутами на переднем конце уменьшает запросы на сторону сервера и снижает вычислительное давление на стороне сервера, но он подходит только для ситуаций, когда необходимо сортировать только локальные данные. Если вам нужно сортировать весь набор данных в нескольких атрибутах, это в конечном итоге будет сделано на уровне базы данных на стороне сервера.
Выше приведено полное описание того, как массивы объектов JavaScript отсортированы по указанным атрибутам и направлениям сортировки, которые редактор представил вам. Я надеюсь, что они будут вам полезны. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!