如何根据对象的两个值对填充了对象的数组进行排序?

时间:2014-12-22 13:07:36

标签: javascript jquery arrays sorting object

我有一个填充了对象的数组。这些对象以两个值开头:sort1sort2

var arr_obj = [
    {
        sort1:'3000',
        sort2:'200',
        value:'Value1'
    },
     {
        sort1:'4000',
        sort2:'100',
        value:'Value2'
    },
     {
        sort1:'6000',
        sort2:'200',
        value:'Value3'
    },
     {
        sort1:'6000',
        sort2:'100',
        value:'Value4'
    },
     {
        sort1:'2000',
        sort2:'500',
        value:'Value5'
    }
];

如何根据sort1sort2的值对对象进行排序。 Sort1占主导地位,如果两个值具有相同的sort1值,则排序函数应查看sort2以确定哪个值优先。

因此,对于我的示例数组,输出应该变为。

[
    {
        sort1:'2000',
        sort2:'500',
        value:'Value5'
    },
    {
        sort1:'3000',
        sort2:'200',
        value:'Value1'
    },
     {
        sort1:'4000',
        sort2:'100',
        value:'Value2'
    },
    {
        sort1:'6000',
        sort2:'100',
        value:'Value4'
    },
     {
        sort1:'6000',
        sort2:'200',
        value:'Value3'
    }     
];

我尝试在数组上使用简单的sort(),但这可能会查看索引而不是第一个值。 有谁知道如何获得所要求的输出?

FIDDLE

2 个答案:

答案 0 :(得分:2)

您可以将比较功能设置为排序。

arr_obj.sort(function(a,b) {
  if (a.sort1 === b.sort1) {
    return a.sort2 - b.sort2;
  }
  return a.sort1 - b.sort1;
});

答案 1 :(得分:0)

试试这个: -

arr_obj.sort(function(prev,next){
  if(prev.sort1 != next.sort1){
    return prev.sort1 > next.sort1;
  }else{
   return prev.sort2 > next.sort2;
  }
});