2013-06-27 5 views
0

Извините, если это действительно вопрос n00b, но я просто попадаю в рельсы и не могу понять это.Сортировка возвращаемого массива JSON по дате

В настоящее время я работаю с Analytics с сайта. И хотите поместить данные в диаграмму. Однако, когда я получаю данные обратно, то, что я хочу, не в порядке. На данный момент данные возвращаемые:

{"legend_size":1,"data":{"series":["2013-06-20","2013-06-21","2013-06-22","2013-06-23","2013-06-24","2013-06-25","2013-06-26"],"values":{"undefined":{"2013-06-26":41,"2013-06-24":2,"2013-06-25":55,"2013-06-22":0,"2013-06-23":1,"2013-06-20":0,"2013-06-21":0}}}} 

И что мне нужно, это [ «данные»] [ «значения»] [ «неопределенными»] бит быть упорядочены по дате.

Я знаю, что это простой вопрос. Но я везде искал и не могу понять.

+0

Вы не можете на самом деле своего рода объект, вы пытаетесь только сортировать ключи? – NicoSantangelo

+0

Мне нужно отсортировать его по-настоящему, поэтому я могу построить его в графе с датой (ключом), являющейся меткой, а значение - точкой на графике – RustComet

+0

Объекты Javascript (хэш) не гарантированы, поэтому я сомневаюсь, библиотека заботится о сортировке значений или нет. Вы пробовали просто сортировать массив рядов? У меня есть догадка, что массив используется для заказа значений. – Amadan

ответ

0

Хорошо, как я уже сказал в комментарии, вы действительно не можете сортировать и объектировать, поскольку он имеет произвольный порядок, поэтому вы должны использовать массив.

Мое решение будет:

var objectFromAnalytics = {"2013-06-26":41,"2013-06-24":2,"2013-06-25":55,"2013-06-22":0,"2013-06-23":1,"2013-06-20":0,"2013-06-21":0}, 
     toSort = [], 
     dateParts; 
    for (var date in objectFromAnalytics) { 
     dateParts = date.split("-"); 

     toSort.push({ date: new Date(dateParts[0], (dateParts[1] - 1), dateParts[2]), value: objectFromAnalytics[date] }); 
    } 


    var sorted = toSort.sort(function(a,b){ 
     return a.date < b.date ? -1 : a.date > b.date ? 1 : 0; //you can change this to sort by value if you want 
    }); 

//sorted == [{ date: dateObject, value: value from analytics} , { ... }] 

Вы, вероятно, может уйти делать это в несколько меньше строк, но я думаю, что это понятно так :)

+0

Создание кучи объектов Date - немного тяжеловес. Вы можете просто сортировать строки лексикографически. Операторы < and > отлично работают на строках. –

+0

Yup, хорошо, поэтому вам не нужно делать 'новые Date' и' split' – NicoSantangelo

Смежные вопросы