Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sort a list by id by using javascript [duplicate]

I'm making a phonegap app on iOS that requires sort a list by time I tried add the time to the id of each li item and then sort based on the id

<ul id="test">
<li id="4112">blub</li>
<li id="1422">blaaah</li>
<li id="6640">hmmmm</li>
<li id="2221">one more</li>
</ul>

and here is the javascript:

$(function(){
var elems = $('#test').children('li').remove();
elems.sort(function(a,b){
    return (new Date(a.id) > new Date(b.id));
});
$('#test').append(elems);
});

http://jsfiddle.net/3uYUq/1103/

I tried on chrome and it ran well . However, if I tried on phonegap app, the list is not sorted correctly . It doesn't follow any order. Any solution for this ? P/s: Someone said that on Safari it should be (new Date(a.id) - new Date(b.id)) on Safari but seems that it doesn't affect phonegap

Explain more about my phonegap code . This code retrive records from db and show it as list of items on html.

function getAllDeadlines_success(tx, results){

var len = results.rows.length;
//var s = "";
$('#allList').empty();
var tmpDueDate = '1900-01-01';
var tmpDueTime = '00:00';
for (var i=0; i<len; i++){
    var allDeadline = results.rows.item(i);

    var deadlineDatePart = allDeadline.duedate.split('-');
    var deadlineTimePart = allDeadline.duetime.split(':');

    var newDate = new Date(deadlineDatePart[0], deadlineDatePart[1] - 1 , deadlineDatePart[2], deadlineTimePart[0], deadlineTimePart[1], 0, 0);         
    var notiDate = new Date(newDate - 86400*1000);
    //compare with current time
    var result = isLate(allDeadline.duedate, allDeadline.duetime).toString();
    if ( result == "true"){         
        $('#allList').append('<li id = "'+allDeadline.duedate+' '+allDeadline.duetime+'"><a href="#DeadlineDetail" id = "'+allDeadline.id+'" data-transition = "slide">'+ allDeadline.class +'<br>'+ allDeadline.duedate+'  '+ allDeadline.duetime+'<br>'+ allDeadline.description +'</a></li>');
        // window.plugin.notification.local.add({
        //  id : getRandomInt(0,99999), 
        //     message: 'Dont forget to complete: '+allDeadline.description+'',
        //     badge: 0,
        //     date: notiDate
        // });
    }
}

$(function(){
    var elems = $('#allList').children('li').remove();
    elems.sort(function(a,b){

        return (new Date(a.id) > new Date(b.id));
    });

    $('#allList').append(elems);
});
$("#allList").listview().listview('refresh');

}
like image 465
ThangPQ Avatar asked May 14 '14 17:05

ThangPQ


People also ask

How do you sort an array by id?

IF you mean that you wanted them sorted by id and if the id matches, you want them sorted by name then use this: items. sort(function(a, b) { if (a.id !== b.id) { return a.id - b.id } if (a.name === b.name) { return 0; } return a.name > b.name ?

How will you sort an array with many duplicated values in Java?

A simple solution would be to use efficient sorting algorithms like Merge Sort, Quicksort, Heapsort, etc., that can solve this problem in O(n. log(n)) time, but those will not take advantage of the fact that there are many duplicated values in the array. A better approach is to use a counting sort.


1 Answers

The comparison function must return an integer. sort checks whether it's negative, zero, or positive, and uses that to determine how the two elements should be ordered. So do:

elems.sort(function(a, b) {
    return a.id - b.id;
});

Or, in modern ES6 style:

elems.sort((a, b) => a.id - b.id);
like image 94
Barmar Avatar answered Oct 22 '22 01:10

Barmar