我正在尝试根据对象中的各种键对多个级别的对象数组进行排序。
例如,假设对象内部有一个值应该按升序排列,并且有一个优先级标志,输出应该具有优先级标志的对象在顶部,然后是其他的,两个集应该按值
排序I / P:对象数组(带有值和优先级标志)
var inputArray = [
{ value: 200, hasPriority: false},
{ value: 100, hasPriority: false},
{ value: 80.7, hasPriority: false},
{ value: 85, hasPriority: false},
{ value: 90, hasPriority: false},
{ value: 100, hasPriority: false},
{ value: 100, hasPriority: false},
{ value: 65, hasPriority: false},
{ value: 100, hasPriority: false},
{ value: 120, hasPriority: true},
{ value: 195, hasPriority: true},
{ value: 120, hasPriority: false}
]
O / P:排序数组,其对象按其值的升序排列,优先级对象位于顶部。
所以输出应该有
{
value: 120,
hasPriority: true
}
在顶部,然后按升序排列其他对象
我尝试了什么? 我尝试在列表上运行两次排序。最初,要根据值进行排序,然后根据标志进行排序。但是,在第二次排序结束时,如果将带有 hasPriority 的对象置于顶部,则其他值将丢失其排序顺序。
我的排序方法是
function(a,b){
if(a.value < b.value) return -1;if(a.value > b.value) return 1; return 0;
}
和
function(a,b){
if(a.hasPriority) return -1; if(b.hasPriority) return 1; return 0;
}
请告诉我,除了在初始排序后运行列表并在第一个条件后将值拉到前面之外,是否有任何其他方法可以做到这一点。
此外,我可能需要处理其他级别的排序。在第三级排序中可能还有其他标志会覆盖其他标志。
每个后续排序级别都需要保持集合中现有的排序顺序