当前位置: 动力学知识库 > 问答 > 编程问答 >

Array sorting with condition in Javascript

问题描述:

I need to sort an array in ascending order and to put all zeros in the end.

For example [0, 0, 0, 3, 2, 1] needs to be sorted to [1, 2, 3, 0, 0, 0].

This is my code, what do I need to add to make sure all zeros are at the end?

function sort_by_field(array, field){

return array.sort(function(a, b){

if( a[field] > b[field] ){

return 1;

}

if( a[field] < b[field] ){

return -1;

}

return 0;

});

}

Any help will be appreciated.

网友答案:

You can do something like this:

[0, 0, 0, 3, 2, 1].sort(function(a,b){ 
    if(a === 0) return 1;
    else if(b === 0) return -1;
    else return a - b;
});
网友答案:

Just check the special cases for zero before your other comparisons. So the comparison function might look like this:

function(a, b) {
    if (a === b)
        return 0;
    if (a === 0)
        return 1;
    else if (b === 0)
        return -1;

    //the rest of the comparison logic
}

It's vitally important for some sorting algorithms that the comparison function is super consistent, so that's why I've gone to the extra trouble of comparing both are equal at the very beginning.

网友答案:

You can do something like:

document.write([0, 0, 0, 3, 2, 1].sort(function (a, b) {
    return +!a || -!b || a - b;
}));
分享给朋友:
您可能感兴趣的文章:
随机阅读: