我拥有的代码有效,但是对象的顺序不正确。
这就是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(可用频道订购)
答案 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>');
});