日期:2014-05-16  浏览次数:20315 次

JS对象数组排序出错

<script language="javascript">
var arr={"11": 5, "52": 1, "23": 1, "33": 1, "32": 1, "31": 6, "45": 1, "37": 2, "43": 1, "36": 1, "61": 1, "62": 1, "400": 3, "100": 4, "81": 1, "44": 1}
var arrDic = new Array();
var i = 0;
for(var p in arr)
{
var obj = new Object();
obj.id = parseInt(p);
    obj.num = parseInt(arr[p]);
    arrDic.push(obj);
i++;
}

for (var i=0;i<arrDic.length;i++){
document.write(arrDic[i].id+' '+arrDic[i].num+'<br>');
}
document.write("----------------------</br>");
arrDic.sort(function cmp(a,b){return a.num-b.num>0;});
for (var i=0;i<arrDic.length;i++){
document.write(arrDic[i].id+' '+arrDic[i].num+'<br>');
}
</script>


如上代码,我把arr(它其实是一个对象)中的每对属性取出来,并放到一个对象数组arrDic中。然后对这个arrDic进行排序。 为什么结果还是乱序的? 

------解决方案--------------------

rrDic.sort(function cmp(a,b){return a.num-b.num;});

------解决方案--------------------
<script language="javascript">
var arr={"11": 5, "52": 1, "23": 1, "33": 1, "32": 1, "31": 6, "45": 1, "37": 2, "43": 1, "36": 1, "61": 1, "62": 1, "400": 3, "100": 4, "81": 1, "44": 1}
var arrDic = new Array();
var i = 0;
for(var p in arr)
{
var obj = new Object();
obj.id = parseInt(p);
    obj.num = parseInt(arr[p]);
    arrDic.push(obj);
i++;
}

for (var i=0;i<arrDic.length;i++){
document.write(arrDic[i].id+' '+arrDic[i].num+'<br>');
}
document.write("----------------------</br>");
arrDic.sort(function cmp(a,b){return a.num-b.num;});
for (var i=0;i<arrDic.length;i++){
document.write(arrDic[i].id+' '+arrDic[i].num+'<br>');
}
</script>