2013-08-28 49 views
2

我整理結構的對象{「姓名」,「伯爵」}一個問題:JavaScript排序和排序等於結果。怎麼樣?

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中元素的順序不一樣。我需要他們是一樣的。

回答

1

爲了讓您排序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; 
} 
2

如果你的對象是這樣的:

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

使用此功能比較:

function compareElements(a, b) 
{ 
    return a.count - b.count; 
}