使用jQuery对解析数据进行排序

时间:2015-03-04 22:36:43

标签: javascript jquery arrays sorting

我想用一个简单的.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));

  }

});

2 个答案:

答案 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);
  }

});