【问题标题】:jQuery .each object orderingjQuery .each 对象排序
【发布时间】:2013-12-10 21:54:10
【问题描述】:

我有一个 PHP 文件,它为某些类抓取外部 URL,然后将它们放入数组中。然后我使用 json_encode() 对数组进行了编码。该数组按照必须迭代的顺序排列,但由于某种原因,JSON 没有以正确的顺序进行迭代。它按降序排列,而不是升序排列。

以下是返回的 JSON 示例:

[{
   "id":1,
   "info":
         {
            "title":"Design Prepaid cards with HD quality ",
            "titleurl":"http:\/\/www.peopleperhour.com\/job\/design-prepaid-ards-with-hd-quality-380258",
            "price":"\u00a3 400 ",
            "urgent":"Urgent",
             "jobID":"380258"
         }
 },
 {
    "id":2,
    "info":
         {
             "title":"Charted accontant",
             "titleurl":"http:\/\/www.peopleperhour.com\/job\/charted-accontant-380251",
             "price":"\u00a3 60 ",
             "urgent":"Urgent",
             "jobID":"380251"
         }
 }]

这就是我当前显示 JSON 的方式:

    var jsonResults = JSON.parse(data);

    var count = (jsonResults.length);
    // Iterate Through Results
    $.each(jsonResults, function(key, value)
    {

        // Display Data
        $('#resultsPanel').fadeIn('slow');

        $('#resultsPanel').prepend(
            '<div class="item" id="'+ value.info.jobID +'">'+
            '<div class="title"><a href="'+ value.info.titleurl+'" target="_blank">'+ value.info.title +'</a></div>'+
            '<div class="price">'+ value.info.price +'</div>'+
            '</div>'
        );
    });

可以订购 JSON 吗?

【问题讨论】:

  • 您可以对数组进行排序,如果您试图在包含数组中具有特定顺序,但对象无法排序,因为对象中不保证顺序。
  • 作为旁注,只需将每个循环替换为 for(var i=jsonResult; i--;) { 将向后迭代数组
  • 我假设它与 JSON 对象中的数组顺序相同?
  • 附注,.fadeIn 应该在所有数据插入之后,不是吗?
  • @Izkata - 并不重要,因为前置非常快,并且淡入淡出是异步的,但是将它放在循环中似乎是一个坏主意,所以是的,fadeIn 应该放在每个之后循环,当然,使用 append 可以解决顺序错误的问题。

标签: javascript php jquery arrays json


【解决方案1】:

看这部分:

$('#resultsPanel').prepend(

“前置”的意思是“放在开头”,这将反转您的列表(将第 1 项放在开头,然后将第 2 项放在开头,等等...)。我很确定你的意思是:

$('#resultsPanel').append(

【讨论】:

  • 您先生,真是个天才!就这么简单!然而,这确实带来了另一个问题。该脚本的重点是使用setInterval 函数自动更新,该函数在指定的间隔时间后触发.ajax 调用。但是,如果发布了任何新工作,它们将最终出现在容器的底部,而不是顶部。
  • @MikeF 如果您不想更改 javascript,只保留prepend,PaparazzoKid 建议的反转初始数据可能会起作用。不过,我更喜欢将初始加载与更新分开。
【解决方案2】:

对象是无序的集合。您不能以跨浏览器兼容的方式在它们上指定订单。除非已经按规则排序,否则没有原始顺序的概念。

所以对服务器上的数据进行排序,然后以相同的排序顺序对其进行枚举。

编辑

正如我在下面提到的,我的 jQuery 知识很少,但也许这样的东西可以工作:

var jsonResults = JSON.parse(data);
Object.keys(jsonResults).reverse().forEach(function (key, value) {
    // do something here
});

【讨论】:

  • @Izkata - JSON 是字符串中使用的数据格式,重要的是一旦将该字符串解析为 javascript 对象后的数据结构,它是数组还是对象,没有“ list",并且只有数组才能有顺序。
  • 这正是我正在做的。数据被抓取并放入具有唯一标识键/值对的数组中。然后使用json_encode 函数对其进行编码。如果我转到生成数据的 PHP 文件,它会以我需要的格式/顺序输出 JSON。然而,当它到达客户端时,它以某种方式被反向排序。
  • @MikeF 我在 jQuery 方面并不太胜任,但是在快速浏览之后,你能不能不使用类似的东西:$(yourobject).toArray().reverse();
  • @adeneo 我现在正在做很多 Python,并且已经开始为任何顺序数据结构说“列表”,这些语言没有两者作为不同的东西(如 Perl)。我的观点仍然存在:这个数据是一个对象数组——它有顺序。
【解决方案3】:

还有一个类似的问题可能会给你答案: sort json object in javascript

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 2012-02-11
    • 2012-06-09
    • 2011-09-06
    • 2010-12-26
    • 2013-11-01
    • 2016-05-12
    • 2012-06-05
    • 1970-01-01
    相关资源
    最近更新 更多