I have an object with the following structure:
var jsonData = { "1":["Test Event 1","5","interview","08:30:00","2016-05-28","1"], "2":["Test 2","2","Lesser Important Items","08:30:00","2016-05-27","0"], "3":["Test Event 4","5","meeting","08:30:00","2016-06-12","1"], "4":["","0","Lesser Important Items","08:30:00","2016-06-12","0"], "5":["","0","Lesser Important Items","08:30:00","2016-06-12","0"], "6":["Test Event 3","1","interview","19:30:00","2016-05-29","1"] }
I wanted to sort this on the basis of the time and date, and this is what I tried:
jsonData.sort(function(a, b) { return a.time - b.time; })
but this is returning an error stating:
jsonData.sort is not a function
Advertisement
Answer
The sort()
method can only apply applied to array, the provided data is an object.
If you just want the sorted index array
var data = { "1": ["Test Event 1", "5", "interview", "08:30:00", "2016-05-28", "1"], "2": ["Test 2", "2", "Lesser Important Items", "08:30:00", "2016-05-27", "0"], "3": ["Test Event 4", "5", "meeting", "08:30:00", "2016-06-12", "1"], "4": ["", "0", "Lesser Important Items", "08:30:00", "2016-06-12", "0"], "5": ["", "0", "Lesser Important Items", "08:30:00", "2016-06-12", "0"], "6": ["Test Event 3", "1", "interview", "19:30:00", "2016-05-29", "1"] }; var res = Object.keys(data) // get object keys array .sort(function(a, b) { // sort the key array based on the date and time // convert to date and get difference for sorting return new Date(data[a][4] + ' ' + data[a][3]) - new Date(data[b][4] + ' ' + data[b][3]); }) console.log(res)
Or if you want to convert it to a sorted array based on the time and date then do something like this,
var data = { "1": ["Test Event 1", "5", "interview", "08:30:00", "2016-05-28", "1"], "2": ["Test 2", "2", "Lesser Important Items", "08:30:00", "2016-05-27", "0"], "3": ["Test Event 4", "5", "meeting", "08:30:00", "2016-06-12", "1"], "4": ["", "0", "Lesser Important Items", "08:30:00", "2016-06-12", "0"], "5": ["", "0", "Lesser Important Items", "08:30:00", "2016-06-12", "0"], "6": ["Test Event 3", "1", "interview", "19:30:00", "2016-05-29", "1"] }; var res = Object.keys(data) // get object keys array .sort(function(a, b) { // sort the key array based on the date and time // convert to date and get difference for sorting return new Date(data[a][4] + ' ' + data[a][3]) - new Date(data[b][4] + ' ' + data[b][3]); }).map(function(v) { // use map to generate the object array return data[v] // get object from the data }); console.log(res)
In case if you want to re-index based the object keys then do something like this using sorted object array
var data = { "1": ["Test Event 1", "5", "interview", "08:30:00", "2016-05-28", "1"], "2": ["Test 2", "2", "Lesser Important Items", "08:30:00", "2016-05-27", "0"], "3": ["Test Event 4", "5", "meeting", "08:30:00", "2016-06-12", "1"], "4": ["", "0", "Lesser Important Items", "08:30:00", "2016-06-12", "0"], "5": ["", "0", "Lesser Important Items", "08:30:00", "2016-06-12", "0"], "6": ["Test Event 3", "1", "interview", "19:30:00", "2016-05-29", "1"] }; Object.keys(data) // get object keys array .sort(function(a, b) { // sort the key array based on the date and time // convert to date and get difference for sorting return new Date(data[a][4] + ' ' + data[a][3]) - new Date(data[b][4] + ' ' + data[b][3]); }).map(function(v) { // use map to generate the object array return data[v] // get object from the data }).forEach(function(v, i) { data[i + 1] = v; // update based on the sorted array }) console.log(data)