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; } |