Как я могу настроить это. Когда это заставляет getJSON возвращать результаты, упорядоченные по дате?

ОБНОВЛЕНИЕ: Похоже, мы направляемся к щедрости. Первый раз для меня.

Моя цель - настроить этот код для получения результатов, упорядоченных по дате.

ОБРАЗЕЦ КОДА

$.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, который я вызываю.

В большинстве случаев это желаемое поведение.

Однако теперь мне нужно вернуть результаты, упорядоченные по дате, для других случаев (по убыванию, сначала по порядку).

Ответ 1

У вас есть результаты в вашем when, теперь вам просто нужно сортировать, используя стандартную функцию сортировки.

$.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 уже является объектом даты.

Ответ 2

Убедитесь, что echo json_encode($assocArray) правильный JSON, который войдет в аргументы data, которые вы видите ниже. Таким образом, когда они будут выполнены, переменные выше $.when() будут иметь data, я считаю, что вы хотите как свой arguments Array Like Object.

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

Ответ 3

Если URL-адреса, которые вы делаете для запроса, обслуживают параметры JSON для сортировки по дате, вам придется сделать это после того, как у вас есть все данные. Что-то вроде этого должно работать

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);

});