我想用一个简单的.sort()
对客户列表(来自变量“clients"”的键列表)进行排序。
我无法排序"客户"但我我能够排序" key_list" (它们在我的控制台中按字母顺序排列)。
因此...
我在document.write中看到的是一个客户列表,其中包含"客户端:(client_name)"在每个客户之后换行,这很好。但它并没有特别的顺序。
我在console.log中看到的是按字母顺序排列的客户列表,这很好。但是每个客户端都没有显示为"客户端:(client_name)"而且没有换行符。它是一个大型列表,每个项目用逗号分隔。
为什么我无法对"客户"中的键进行排序?这是我试图访问已解析的"数据"?
的方式$.ajax ({
url: 'data.php?',
type: 'GET',
dataType: "json",
success: function(data) {
var clients = JSON.parse(data);
for (var key in clients) document.write('Client:' + ' ' + key + '<br>');
var key_list = Object.keys(clients);
console.log(key_list.sort(clients));
}
});
答案 0 :(得分:0)
sort
需要一个带有两个参数的回调函数,并且还要求基于这两个参数之间的比较返回值。
.sort(function(a,b){ return a-b; });
您正在从反序列化的json中发送一个对象,它不是一个接受两个参数并根据比较返回值的函数,因此排序不起作用。默认情况下,sort将使用词典比较。
这将是默认电话
console.log(key_list.sort());
答案 1 :(得分:0)
因为console.log()只打印key_list.sort(clients)对象。所以基本上你是记录对象,而不是对象中的每个元素。
当然,您没有按照您希望的顺序打印客户端,因为您在排序之前就是这样做的。就像Travis J所说,你应该只使用.sort()。
所以你应该这样做; console.log(clients.sort());
这将允许您打印整个对象并按排序顺序打印出所有客户端。
编辑:
$.ajax ({
url: 'data.php?',
type: 'GET',
dataType: "json",
success: function(data) {
var clients = JSON.parse(data);
var sortedClients = clients.sort();
for (var key in sortedClients){
document.write('Client:' + ' ' + key + '<br>');
console.log('Client: ' + key);
}
});