有没有办法使用下面的代码并改变它以按字母顺序排序$ .each结果?
我在想可能有办法继续保留$ .each并且可能会做一些if else语句?基本上,我希望val是有序的而不是idx。
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 :(得分: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简单吗?这么有用,内置的东西!)