【发布时间】:2019-07-10 14:02:56
【问题描述】:
我想创建按此顺序对元素进行排序的方法:
列表中的第一个元素必须是“活动”的元素(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 }
预期顺序:Object2 -> Object1 -> Object6 -> Object4 -> Object5 -> Object3
【问题讨论】:
-
请点击edit然后点击sn-p编辑器
[<>]并提供minimal reproducible example输入和预期输出
标签: javascript arrays sorting