我在排序结构{“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中元素的顺序不一样。我需要他们是一样的。
答案 0 :(得分:3)
为了让您排序stable,您需要按照索引比较“相等”项目:
// 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)
如果您的对象如下:
var arrObj = {
name: "aaa",
count: 1
};
使用此功能进行比较:
function compareElements(a, b)
{
return a.count - b.count;
}