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

Sorting Parsed Data with jQuery

本文关键字:排序 数据 jQuery 使用      更新时间:2023-09-26

我想用一个简单的.sort().对客户端列表(这是变量"clients"的密钥列表)进行排序

我无法对"客户端"进行排序,但我可以对"key_list"进行排序(它们在我的控制台中按字母顺序排列)。

所以。。。

我在document.write中看到的是一个带有"Client:(Client_name)"的客户端列表,每个客户端后面都有一个换行符,这很好。但它没有特别的顺序。

我在console.log中看到的是一个按字母顺序排列的客户端列表,这很好。但在那里,每个客户端都没有显示为"client:(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));
  }
});

因为console.log()只打印key_list.sort(client)对象。因此,基本上,您记录的是对象,而不是对象中的每个元素。

因此,你当然不会在文档中按照你想要的顺序打印客户端,因为你在排序之前就要这样做。就像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);
  }
});

sort需要一个回调函数,该函数接受两个参数,还需要一个基于这两个参数之间比较的返回值。

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

您正在从反序列化的json中发送一个对象排序,json不是一个接受两个参数并根据比较返回值的函数,因此排序不起作用。默认情况下,排序将使用字典比较。

这将是默认调用

console.log(key_list.sort());