Javascript按值排序数组

时间:2012-10-19 20:45:20

标签: jquery arrays sorting

我有一个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中运行。

3 个答案:

答案 0 :(得分:21)

首先将其转换为数组,对其进行排序,然后创建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));
});

答案 1 :(得分: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的评论更新

当然,您可以通过从数据中分离列名称(&#34; id&#34;和#34; name&#34;)并使其成为数组数组来缩小json响应大小。

答案 2 :(得分: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();
});