Как я могу настроить это. Когда это заставляет 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);
});