【问题标题】:Sorting Parsed Data with jQuery使用 jQuery 对解析的数据进行排序
【发布时间】:2015-03-04 22:36:42
【问题描述】:

我想使用简单的.sort() 对客户端列表(这是来自变量“clients”的键列表)进行排序。

我无法对“客户”进行排序,但我能够对“key_list”进行排序(它们在我的控制台中按字母顺序排列)。

所以...

我在 document.write 中看到的是一个带有“Client: (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));

  }

});

【问题讨论】:

  • 请提供您获得的数据样本。
  • 你应该了解console.log和开发者工具
  • 在我看到的网页中...“客户:WESTERVILLE,客户:AKRON,客户:TOLEDO,客户:BELLVIEW”...等。在控制台中我看到... ["ABBEYVILLE", "AKRON", "ADENA", "", "AKAMAI" ... etc}。该网页的所有内容均按随机顺序排列,但格式正确。虽然控制台的顺序正确,但我不知道如何以正确的格式获取它。

标签: javascript jquery arrays sorting


【解决方案1】:

因为 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);
  }

});

【讨论】:

  • 谢谢!我没有足够高的声望来“向上箭头”你!
  • 不用担心。 console.log 是一个打印功能,它没有你想要的格式,因为没有把它放在那里。此外,您在将客户端打印到 HTML 之前没有对它们进行排序,因此它们是随机的。最后,您可以将我的答案标记为正确答案。 :) 谢谢,麻烦您了。大声笑
  • 你能写出整个代码吗?对于 console.log(clients.sort());我得到“排序未定义”。
  • @MatthewDuthie 这就是棘手的地方。你能告诉我客户的输出吗?所以只需做一个 console.log(clients);
【解决方案2】:

sort 需要一个带有两个参数的回调函数,并且还需要一个基于这两个参数之间比较的返回值。

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

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

这将是默认调用

console.log(key_list.sort());

【讨论】:

  • 谢谢!我没有足够高的声望来“向上箭头”你!
猜你喜欢
  • 2018-03-29
  • 2013-02-11
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
相关资源
最近更新 更多