【问题标题】:Sorting array objects from JSON从 JSON 排序数组对象
【发布时间】:2015-04-05 20:05:44
【问题描述】:

我正在尝试使用 jQuery 移动开发应用程序。我有一个 JSON 文件:

[{
  "title": "title you desire",
  "url" : "thisistheurl.com"
},{
  "title": "title you desire",
  "url" : "thisistheurl.com"
},{
  "title": "title you desire",
  "url" : "thisistheurl.com"
}]

我现在正在将文件中的数据检索到 JS 中的对象数组中:

var linkList = [];
        $.getJSON('linklist.json').success(function (json) {
        $.each(json, function(i, obj) {
            linkList.push(obj);
        });
        }).then(function() {



      linkList.sort(function(a, b){
      var nameA=a.title.toLowerCase(), nameB=b.title.toLowerCase();
      if (nameA < nameB) //sort string ascending
       return -1;
     if (nameA > nameB)
       return 1;
         return 0; //default return value (no sorting)
     });

$.each( linkList, function( key, val ) {


        var $li;
        $li = $("<li><a href='#' data-status='Downloaded'>"+val.title+"</a></li>");

        window.resolveLocalFileSystemURL(fileSource + val.title + ".pdf", success, fail);

        function success() {
            $li.find("a").on("click", function(){ openPdf(val.title); });
            $li.find("a").data('status', 'Downloaded');
            $("#linkList").append($li).listview('refresh');

        }

        function fail() {
            $li.find("a").on("click", function(){ downloadPdf(val.title,val.url); });
            $li.find("a").data('status', 'Not downloaded');
            $("#linkList").append($li).listview('refresh');
        }


    });
    $("#linkList")
                .listview({
                autodividers: true,
                autodividersSelector: function (li) {
                var out = li.find('a').data("status");
                return out;
            }
    }).listview('refresh');





});

    }

我正在使用Phonegap并在我的手机上进行测试,所以调试的方法并不多,但我的排序有问题。如果我没有排序,一切都可以正常工作(当然数据没有排序),但我希望有一种方法可以按标题对它们进行排序。

【问题讨论】:

  • 那么,是因为 .getJSON 是异步的吗?如果是这样,我该如何排序?
  • 我正在这样做,不是吗?
  • 显然,您提供了回调。只需将其余代码放在那里,它就会工作
  • 调试此问题的一个好方法是在本地提供您的 html 文件并使用 chrome 开发工具/控制台来检查 JavaScript 对象。
  • 我已经添加了其余的代码。正如我所说,如果我删除排序,它会起作用(但没有排序)。

标签: jquery arrays json cordova sorting


【解决方案1】:

出现问题是因为您试图在加载数据之前访问数据。您可以将.then 块放在getJson 之后,然后将所有代码放在那里,包括排序。 然后当 getJson Promise 被解析时,block 会被调用。

链接: Deffered.then()

【讨论】:

  • 在排序功能的第一行你忘记了';'在行尾。
猜你喜欢
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2020-06-07
  • 2021-05-19
相关资源
最近更新 更多