Я хочу создать метод, который сортирует элементы в следующем порядке:
Первым в списке должны быть элементы, которые являются «активными» (для поля isActive установлено значение true). Если оба сравниваемых элемента активны, то сортируются по алфавиту.
Следующими элементами в списке являются те элементы, которым для полей (createSheet и centralBox) присвоено значение true. Если для обоих сравниваемых элементов эти поля имеют значение true, то сортируются по алфавиту.
Следующими элементами в списке являются элементы, для которых только поле centralBox установлено в значение true. Как и в любом другом случае, когда оба элемента имеют эти поля, установленные на true, сортировка производится в алфавитном порядке.
Следующими элементами в списке являются элементы, для которых только для поля createSheet установлено значение true. И так же, как и выше ...
Последняя сортировка в иерархии - сортировка по алфавиту
Это то, что я сделал, и оно не работает (имя - строка, другие поля - логические):
sortingSelectList = (firstElement, secondElement) => {
const elementToCompare = {
name: firstElement.label.toLowerCase(),
isActive: this.state.activeSystems.ids.includes(firstElement.label),
createSheet: this.state.systems.entities[firstElement.label].createSheet,
centralBox: this.state.systems.entities[firstElement.label].centralBox
};
const comparingElement = {
name: secondElement.label.toLowerCase(),
isActive: this.state.activeSystems.ids.includes(secondElement.label),
createSheet: this.state.systems.entities[secondElement.label].createSheet,
centralBox: this.state.systems.entities[secondElement.label].centralBox
};
if (elementToCompare.isActive < comparingElement.isActive) { return -1; }
if (elementToCompare.isActive > comparingElement.isActive) { return 1; }
if (elementToCompare.centralBox && elementToCompare.createSheet < comparingElement.centralBox && comparingElement.createSheet) { return -1; }
if (elementToCompare.centralBox && elementToCompare.createSheet > comparingElement.centralBox && comparingElement.createSheet) { return 1; }
if (elementToCompare.centralBox < comparingElement.centralBox) { return -1; }
if (elementToCompare.centralBox > comparingElement.centralBox) { return 1; }
if (elementToCompare.createSheet < comparingElement.createSheet) { return -1; }
if (elementToCompare.createSheet > comparingElement.createSheet) { return 1; }
if (elementToCompare.name < comparingElement.name) { return -1; }
if (elementToCompare.name > comparingElement.name) { return 1; }
return 0;
}
Может кто-нибудь мне помочь?
Пример:
Object 1: { name: B,
isActive: true,
createSheet: false,
centralBox: false }
Object 2: { name: A,
isActive: true,
createSheet: false,
centralBox: false }
Object 3: { name: B,
isActive: false,
createSheet: false,
centralBox: false }
Object 4: { name: B,
isActive: false,
createSheet: false,
centralBox: true }
Object 5: { name: B,
isActive: false,
createSheet: true,
centralBox: false }
Object 6: { name: B,
isActive: false,
createSheet: true,
centralBox: true }
Ожидаемый порядок: Объект2 -> Объект1 -> Объект6 -> Объект4 -> Объект5 -> Объект3