Я сортирую список объектов по переменной, хранящейся в них. Назовем эту переменную "sortCriteria"
Пример набора значений «sortCriteria» для разных объектов:
400, 329, 529, «String1», 678, «String2», 588, «String3», «String1», 201, «String2»
Итак, в «sortCriteria» я могу получить 4 вида значений:
1. Числовое значение
2. Строка1
3. Строка2
4. Строка3
Теперь я должен отсортировать эти данные таким образом, чтобы числовые данные имели самый приоритетный, затем «String1», затем «String2» и затем «String3». т.е.
Приоритет (Числовой> Строка1> Строка2> Строка3)
Обратите внимание, что при выводе все эти числовые значения должны быть в отсортированном порядке.
Следовательно, отсортированный порядок выборки данных будет -
201, 329, 400, 529, 588, 678, «String1», «String1», «String2», «String2», «String3».
Кроме того, если несколько объектов имеют одинаковые значения sortCriteria, их порядок следует сохранить.
Например.
Допустим, я получил 2 объекта, у которых значение sortCriteria одинаково
Объект 1: 205,
Объект 2: 205.
Затем в отсортированном порядке Object1 должен предшествовать Object2.
Моя текущая реализация сортировки определенной логики на Javascript выглядит так:
function mySortRule(a, b) {
var value1 = a[1], value2 = b[1];
var value1Priority = getPriorityOf(value1);
var value2Priority = getPriorityOf(value2);
return value1Priority - value2Priority;
}
function getPriorityOf(value) {
var priority;
if(value!="String1" && value!="String2" && value!="String3") {
priority = value;
}
else if(value == "String1") {
priority = Number.MAX_VALUE-2;
}
else if(value == "String2") {
priority = Number.MAX_VALUE-1;
}
else if(value == "String3") {
priority = Number.MAX_VALUE;
}
return priority;
}
sortCriteriaArray.sort(mySortRule);
Значение sortCriteriaArray [i] имеет следующий формат:
["indexOfObject", "sortCriteria"]
Это решение работает, но не сохраняет порядок объектов. Кроме того, я не чувствую, что это хороший подход, потому что -
1. Завтра, допустим, мы должны вписаться в некоторые другие типы строк. В этом случае нам придется изменить эти условные операторы в функции getPriorityOf ().
2. Использование «Number.MAX_VALUE» для установки приоритета выглядит мне неприлично.
Может ли быть лучший способ добиться этого?