在多个键

时间:2016-02-12 19:17:41

标签: javascript sorting

我正在尝试根据对象中的各种键对多个级别的对象数组进行排序。

例如,假设对象内部有一个值应该按升序排列,并且有一个优先级标志,输出应该具有优先级标志的对象在顶部,然后是其他的,两个集应该按值

排序

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; 
}

Codepen

请告诉我,除了在初始排序后运行列表并在第一个条件后将值拉到前面之外,是否有任何其他方法可以做到这一点。

此外,我可能需要处理其他级别的排序。在第三级排序中可能还有其他标志会覆盖其他标志。

每个后续排序级别都需要保持集合中现有的排序顺序

0 个答案:

没有答案