JSON迭代结果......可以排序吗?

时间:2014-05-21 14:17:48

标签: javascript json sorting each

有没有办法使用下面的代码并改变它以按字母顺序排序$ .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");
}

1 个答案:

答案 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简单吗?这么有用,内置的东西!)