4

我在对结构 {"name", "count"} 的对象进行排序时遇到问题:

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

我需要按“计数”(从小到大,然后从大到小)对此进行排序。

我的排序功能:

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 中的元素顺序不一样。我需要它们是一样的。

4

2 回答 2

4

为了使您排序稳定,您需要按索引比较“相等”的项目:

// 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;
}
于 2013-08-28T13:36:06.380 回答
2

如果你的对象是这样的:

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

使用此功能进行比较:

function compareElements(a, b)
{
  return a.count - b.count;
}
于 2013-08-28T13:30:45.453 回答