12

我有一个 AJAX 调用返回 JSON,如...

{
  490: "A",
  675: "B",
  491: "C",
  520: "D",
  681: "E",
  679: "F",
  538: "G"    
}

然后我将它附加到select使用:

var output = jQuery.parseJSON(data);

$.each(output, function(key, value) {
    $el.append($("<option></option>")
       .attr("value", key).text(value));
});

我想按值排序,所以输出A,B,C,D...就像现在一样,它只是按键的顺序读取。

这是踢球者- 似乎在 Firefox 中运行良好,而不是在 Chrome 中。

4

3 回答 3

23

首先将其转换为数组,对其进行排序,然后创建html。jsfiddle

var output = jQuery.parseJSON(data);
var temp = [];

$.each(output, function(key, value) {
    temp.push({v:value, k: key});
});
temp.sort(function(a,b){
   if(a.v > b.v){ return 1}
    if(a.v < b.v){ return -1}
      return 0;
});
$.each(temp, function(key, obj) {

$el.append($("<option></option>")
       .attr("value", obj.k).text(obj.v));
});
于 2012-10-19T20:54:09.943 回答
2

无法对对象进行排序。尝试将您的 JSON 作为数组返回,以确保它保持在您返回它们的确切顺序中:

[
  {"id":490,"name":"A"},
  {"id":675,"name":"B"},
  {"id":491,"name":"C"},
  {"id":520,"name":"D"},
  {"id":681,"name":"E"},
  {"id":679,"name":"F"},
  {"id":538,"name":"G"}
]

这是原始的小提琴:http: //jsfiddle.net/82BSm/2/并更改为数组:http: //jsfiddle.net/82BSm/1/

根据 pst 的评论更新

您当然可以通过将列名(“id”和“name”)与数据分开并使其成为数组数组来缩小 json 响应大小。

于 2012-10-19T20:48:28.807 回答
0

这样的事情怎么样?

var output = jQuery.parseJSON(data);

var options = [];
$.each(output, function(key, value) {
    options.push(
        $("<option>").val(key).text(value)
    );
});

options.sort(function(a, b) {
    return a.text() > b.text();
});
于 2012-10-19T21:02:10.543 回答