2015-09-24 3 views
2

Мне нужно отсортировать массив в порядке возрастания и поместить все нули в конец.Сортировка массива с условием в Javascript

Например, [0, 0, 0, 3, 2, 1] необходимо сортировать по [1, 2, 3, 0, 0, 0]. Это мой код, что мне нужно добавить, чтобы убедиться, что все нули в конце?

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; 
       }); 
      } 

Любая помощь будет оценена по достоинству.

ответ

8

Вы можете сделать что-то вроде этого:

[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; 
}); 
3

Просто проверьте особые случаи для нуля перед вашими другими сравнениями. Таким образом, функция сравнения может выглядеть следующим образом:

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 
} 

Это жизненно важно для некоторых алгоритмов сортировки, что функция сравнения супер последовательная, так вот почему я пошел к экстренным проблемам сравнения оба равна по крайнему начало.

1

Вы можете сделать что-то вроде:

document.write([0, 0, 0, 3, 2, 1].sort(function (a, b) { 
 
    return +!a || -!b || a - b; 
 
}));

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