按粘性和默认排序功能对数组进行排序

时间:2017-08-21 11:41:39

标签: javascript arrays sorting

我有一个表行数组,需要按字段“data”升序排序。

var data = [
  {data: 5},
  {data: 10, sticky: true},
  {data: 90},
  {data: 50, sticky: true},
  {data: 20, sticky: true},
  {data: 70},
];

但有一个问题。我需要带有“sticky”标志的行来排序到表的顶部。我的排序功能目前看起来像这样:

data.sort(function(a, b) {
   if (a.sticky) return -1;
   if (b.sticky) return +1;
   return mySortFunction(a, b);
});

产生

[
  {data: 10, sticky: true},
  {data: 50, sticky: true},
  {data: 20, sticky: true},
  {data: 5},
  {data: 70},
  {data: 90}
]

问题是,我需要“粘性”行按“数据”(asc)排序。有没有一种简单的方法可以做到这一点,而不先将数据分成粘性和非粘性组,然后对两个组运行sortfunction?

1 个答案:

答案 0 :(得分:3)

您可以这样做:

var data = [
    {data: 5},
    {data: 10, sticky: true},
    {data: 90},
    {data: 50, sticky: true},
    {data: 20, sticky: true},
    {data: 70},
];

function mySortFunction(a, b) {
    return a.data - b.data;
}

function sort(a, b) {
    if(a.sticky === b.sticky) {
        return mySortFunction(a, b);
    } else if (a.sticky){
        return -1;
    }
    // b.sticky === true
    return 1;
}

console.log(data.sort(sort));