Javascript 我如何调整它。什么时候getJSON返回按日期排序的结果?

Javascript 我如何调整它。什么时候getJSON返回按日期排序的结果?,javascript,jquery,getjson,Javascript,Jquery,Getjson,更新:看来我们要去赏金了。这是我第一次 我的目标是调整这段代码,以获得按日期排序的结果 代码示例 $.when( $.getJSON(url0), $.getJSON(url1), $.getJSON(url2), $.getJSON(url3),$.getJSON(url4), $.getJSON(url5),$.getJSON(url6),$.getJSON(url7) ).done( function() { $.each(arguments, function(index, r

更新:看来我们要去赏金了。这是我第一次

我的目标是调整这段代码,以获得按日期排序的结果

代码示例

$.when( $.getJSON(url0), $.getJSON(url1), $.getJSON(url2), $.getJSON(url3),$.getJSON(url4), $.getJSON(url5),$.getJSON(url6),$.getJSON(url7) ).done( function() {

    $.each(arguments, function(index, result) {
        var data = result[0];
        utcday =  data[0].createdOn;
        ltrDay = moment.utc(utcday).format("DD MMM YY");

console.log(ltrDay);

    });
});
这段代码返回由我调用的
getJSON
url排序的结果

在大多数情况下,这是理想的行为


但是,对于其他情况,我现在也需要返回按日期排序的结果(降序,最新优先)。

除非您请求提供JSON accept参数以按日期排序的URL,否则您必须在获得所有数据后执行此操作。像这样的东西应该有用

var date_sort_desc = function (date1, date2) {
  if (date1 > date2) return -1;
  if (date1 < date2) return 1;
  return 0;
};

var dates = [];

$.when( $.getJSON(url0), $.getJSON(url1), ... ).done( function() {

  $.each(arguments, function (index, result) {
      var data   = result[0];
      var utcday =  data[0].createdOn;

      dates.push(moment.utc(utcday).format("YY MM DD"));
  });

  dates.sort(date_sort_desc);

});
var date\u sort\u desc=函数(date1,date2){
如果(date1>date2)返回-1;
如果(日期1<日期2)返回1;
返回0;
};
var日期=[];
$.when($.getJSON(url0),$.getJSON(url1),…).done(函数(){
$.each(参数、函数(索引、结果){
var数据=结果[0];
var utcday=data[0]。createdOn;
推送日期(utc时间(utcday)格式(“YY-MM-DD”);
});
dates.sort(date\u sort\u desc);
});

确保
echo json\u encode($assocaray)
正确的
json
,它将进入下面看到的
数据
参数中。这样,当它们完成时,上面的变量
$。when()
将具有
数据
我相信您想要作为
参数
类似数组的对象

var u0, u1, u2, u3, u4, u5, u6, u7;
$.when($.getJSON(url0, function(data){u0 = data}), $.getJSON(url1, function(data){u1 = data}), $.getJSON(url2, function(data){u2 = data}), $.getJSON(url3, function(data){u3 = data}), $.getJSON(url4, function(data){u4 = data}), $.getJSON(url5, function(data){u5 = data}), $.getJSON(url6, function(data){u6 = data}), $.getJSON(url7, function(data){u7 = data})).done(function(){
  var arrayOfObjects = [];
  $.each([u0, u1, u2, u3, u4, u5, u6, u7], function(index, result){
    var rz = result[0];
    arrayOfObjects.push({data:rz, utcday:rz.data[0].createdOn, ltrDay:moment.utc(utcday).format('DD MM YY')});
  });
  function youMakeIt(aryObs){
    var dateArray = [];
    $.each(aryObs, function(i, v){
      dateArray.push(v.ltrDay);
    });
    /* now you do your thing with `dateArray` putting the array of indexes in
       an `indexes` variable to get the `arrayOfObjects` in the order you like
       Next its like */
    var solution = [];
    $.each(indexes, function(i, v){
      solution.push(dateArray[v]);
    });
    // solution Array holds the order you want for your Objects
    return solution;
  }
  var newArrayOfObjects = youMakeIt(arrayOfObjects);
});

当时,
中包含了结果,现在只需使用标准排序函数进行排序

$.when( $.getJSON(url0), $.getJSON(url1), $.getJSON(url2), $.getJSON(url3),$.getJSON(url4), $.getJSON(url5),$.getJSON(url6),$.getJSON(url7) ).done( function() {
    var results = args = Array.prototype.slice.call(arguments);
    args.sort(function(a, b) {
      return a[0][0].createdOn - b[0][0].createdOn;
    });
    // use sorted args now, args are the results
    console.log(results);

    // assuming a modern browser and using forEach
    results.forEach(function(result) {
      console.log(result[0][0].createdOn);
    });
});

也许我错过了什么?但是您应该能够使用现在应该按createdOn属性排序的结果。我假设您的createdOn属性已经是日期对象。

相关:@Vohuman谢谢。我尝试了各种方法,但都没有成功。这就是为什么我要问具体的背景。我希望有人能给我一个具体的代码示例。这是什么
moment.utc(utcday).format(“DD-MMM-YY”)?矩是一个用于时间操纵的JS库。@PHPglue我正在用实际结果做很多事情。代码示例仅显示返回无序结果的console.log。这样我就可以快速检查答案了。Moment是一个带有时间戳的很酷的库。谢谢,我可以看到它是如何处理单个日期的,但我也需要使用许多其他返回的JSON位。希望你理解我的意思。您的解决方案获得了日期,但我需要使用JSON请求中返回的其他信息。您的解决方案创建了一个新工件,该工件已正确订购,但只包含日期。我不知道如何包括其他的东西。谢谢你的帮助。在此处引发“未捕获的TypeError:无法读取未定义的属性“0”错误:arrayOfObjects.push({data:rz,utcday:rz.data[0].createdOn,ltrDay:moment.utc(utcday).format('DD-MM-YY')});没有快乐。仔细检查我这边的所有内容。真正的问题是,
参数
是一个类似数组的对象,用于
.done(函数(/*really here*/){})
匿名函数。也许您需要将所有
$.getJSON()
查询放入一个数组中。谢谢您的帮助。一切都准备好了。谢谢,但我还是不明白。也许我把你的密码放错地方了。请您将其与我的示例相匹配好吗?createdOn是一个时间戳:“createdOn:1414179586293”我不清楚在哪里放置块。这就是为什么我要尝试匹配我的示例,以便查看它是否有效。它返回以下内容:
[Array[3],Array[3],Array[3],Array[3],Array[3],Array[3],Array[3],Array[3]
,我不知道如何提取所需的内容。例如,我如何显示和查看createdOn的顺序是否正确?@user1452893如果您使用的是chrome或firefox,您应该能够在控制台中检查每个数组的日志记录,但我包括了一个forEach循环,只打印
createdOn
属性。啊哈!结果[0][0]谢谢。这应该让我进入下一步。我需要做其他调整,但这看起来像是照顾订购位。