2014-05-21 109 views
0

有沒有辦法使用下面的代碼,並對其進行更改以$。每個結果按字母順序排序?
我想有可能是一個辦法仍然保持$。每次,也許做一些的if else語句?基本上,我想val是爲了順序而不是idx。JSON迭代結果...可以排序嗎?

function fillsystems(mso,cb) { 
    $("#station").empty().append($('<option>Loading systems...</option>')); 
    mso=mso.replace("&","{08an}"); 
    //alert(mso); 
    $.getJSON("?act=getirdsystems&mso="+mso,function(json){ 
     //alert(json.data); 
     $("#station").empty(); 
     $("#station").append($('<option>Choose...</option>')); 
     $.each(json.data,function(idx,val) { 
     $("#station").append($('<option value='+idx+'>'+val+'</option>')); 
     }); 
     <?php if(!$_GET['edit']) { ?>$("#station").append($('<option value="new">New System...</option>'));<?php } ?> 
     if(sys!='') $("#station").val(sys); 
     cb(); 
    },"json"); 
} 
+0

你可以添加一個語言標籤嗎?它看起來像JavaScript,但你永遠不能太確定 –

回答

0

在您的情況下沒有任何有用的方式。

這樣做的原因是因爲你的數組的下標有內涵(它們被放在value屬性......裏面應該有圍繞其價值的報價,順便說一句),並使用json.data.sort將打破這種關係。也就是說,假設它是一個數組而不是一個對象;如果它是一個對象,那麼無論如何你都無法排序,因爲它沒有順序。

相反,你不妨建立一個數組,你可以排序,然後對其進行排序,然後創建你的選擇:

var selbox = document.getElementById("station"), tmp = []; 
$.each(json.data,function(idx,val) {tmp.push([idx,val]);}); 
tmp.sort(function(a,b) { 
    if(a[1] == b[1]) return 0; 
    return a[1] < b[1] ? -1 : 1; 
}); 
$.each(tmp,function(_,item) { 
    selbox.appendChild(new Option(item[1],item[0])); 
}); 

(邊注:?是不是Vanilla JS簡單的這麼多有用的,內置的東西!)