2012-02-15 3 views
1

У меня есть следующий массив определен в JavaScript,JavaScript По возрастанию Сортировать С Exception

var myPriceList = [0, 0, 0, 1, 5, 3] 

Мне нужно сортировать числа в порядке возрастания и так, что 0s показать в конце рода, как и -

var myPriceList = [1, 3, 5, 0, 0, 0] 

Я понимаю, что я могу написать пользовательскую функцию, как показано ниже, но я просто не знаю, как включить исключение для «0».

function sortNumber(a,b) 
{ 
    return b - a; 
} 

ответ

4

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

Если numSort(a,b) возвращает значение >0, то индекс a должен быть выше (и, таким образом, далее в последовательности). Если значение <0, то b должно быть позже в последовательности. 0 означает, что оба они равны по срокам или порядку.

JSFiddle Demo. См. Также MDN sort reference.

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

Попробуйте это:

var a = [0, 0, 0, 1, 5, 3]; 
a.sort(); 
while(a[0] == 0) a.push(a.shift()); 

// a is now [1, 3, 5, 0, 0, 0] 
+2

Это не работает с ' a = [0, 1, 2, 11] ', так как это закончится с помощью' a = [1, 11, 2, 0] ', поскольку массивы отсортированы на основе ToString (a [i]). – gsnedders

+0

Ah .. это правый. Это не пришло мне в голову в то время .. :) – techfoobar

0
var arr = [0, 0, 0, 1, 5, 3]; 
arr.sort(function(a,b){return a*b==0? 1:a-b}); 

/* Возвращаемое значение: (Array) 1,3,5,0,0,0 */

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