关于排序:javascript排序,结果排序等于。怎样?

javascript sort and sort equals on result. how?

本问题已经有最佳答案,请猛点这里访问。

排序结构为"name"、"count"的对象时出现问题:

1
2
3
4
5
1. name =>"aaa", count => 1
2. name =>"bbb", count => 2
3. name =>"ccc", count => 3
4. name =>"ddd", count => 1
5. name =>"eee", count => 1

我需要按"计数"来排序(从小到大,然后从大到小)。

我的排序函数:

1
2
3
4
5
6
7
8
mass.sort(compareElements);

function compareElements(a, b)
{
 if(a < b) return -1;
 else if(a > b) return 1;
 else return 0;
}

第一次调用(从小到大)时,我得到一个结果"res1"
第二次调用(从大到小)时,我得到结果"res2"
第三次呼叫(又从小到大)我得到"res3"!=‘RES1’!!

res1和res3中元素的顺序不同。我需要他们保持一致。


要使排序稳定,需要按索引比较"相等"项:

1
2
3
4
5
6
7
8
9
10
// mass = [{name:…, count:…}, {name:…, count:…}, …]
for (var i=0; i<mass.length; i++)
    mass[i].index = i;
mass.sort(function(a, b) {
    return compareElements(a, b) || a.index - b.index;
});
function compareElements(a, b) {
    // something
    return a.count - b.count;
}


如果对象如下:

1
2
3
4
var arrObj = {
   name:"aaa",
   count: 1
};

使用此函数比较:

1
2
3
4
function compareElements(a, b)
{
  return a.count - b.count;
}