如何遍历按对象属性排序的对象数组?

时间:2018-06-20 13:11:37

标签: jquery ajax

我拥有的代码有效,但是对象的顺序不正确。

这就是JSON的样子:

https://i.gyazo.com/102efe767cb0a3d8be8a4a57b6b4560e.png

在数据中,数组元素11中的num属性具有值420,即通道号。

我想要做的是根据通道号(num)遍历循环,而不是按照JSON中出现的available_channels的顺序进行迭代。如何更改循环,以便按通道号进行迭代?

http://jsfiddle.net/gnpj5csk/231/

var yql_url = 'https://query.yahooapis.com/v1/public/yql';
var url = 'http://***/***.php?username=***&password=***';

$.ajax({
  'url': yql_url,
  //remove this line later
  'data': {
    'q': 'SELECT * FROM json WHERE url="'+url+'"',
    'format': 'json',
    'jsonCompat': 'new',
  },
  'dataType': 'json',
  'success': function(response){
    console.log(response);
    var res = response.query.results.json;
    var keys = Object.keys(res.available_channels);

    for(var i =0;i< keys.length;i++){
      var num = res.available_channels[keys[i]].num;

      $('#channellist').append(num+"<br>");
    }
  }
});

更多信息:

数组46-频道1:

https://i.gyazo.com/a575219039b8e76c6dc4f7bdc3b99627.png 数组26-频道2:

https://i.gyazo.com/3f765e3a73f61d96080cf8fb74de2ae3.png

订单应该是..

46、26、47、27、48、24,按“ num”数组顺序

现在:396、384、395、390、386(可用频道订购)

1 个答案:

答案 0 :(得分:1)

sort()函数接受一个函数作为参数来定义其他排序方式。要按频道号订购available_channels,请尝试以下操作:

keys.sort(function(a, b) {
    return a.num - b.num;
});

我们在这里正在定义一个排序函数,该函数将使用a和b中的num属性来测试哪个优先。请注意,如果返回值小于0,则返回a;如果返回值大于0,则返回b;如果返回值等于0,则两者合在一起。

您可以找到有关排序功能here

的更多信息

排序完成后,您只需添加$.each

$.each(keys, function(i, k) {
    $('#channellist').append(k.num + '<br>');
});