2015-05-26 2 views
2

У меня есть этот массив:
var temp_arr = ["4~3", "4~6", "4~1", "4~8", "2~7", "2~0", "2~4", "7~5", "7~9", "7~7", "0~2", "0~0", "4~4", "4~5", "4~7"];сортировать массив на 2 уровне в JavaScript

И я хочу сортировки, используя значение, которое перед темtild, а затем со значением, которое является после в tild.

Я нашел несколько решений в Интернете, но не работал.

var temp_arr = ["4~3", "4~6", "4~1", "4~8", "2~7", "2~0", "2~4", "7~5", "7~9", "7~7", "0~2", "0~0", "4~4", "4~5", "4~7"]; 

temp_arr.sort(function(a,b){ 
    return Number(a.split('~')[0]) - Number(b.split('~')[0]); 
}); 

    temp_arr.sort(function(a,b){ 
     var a_ = Number(a.split('~')[1]); 
     var b_ = Number(b.split('~')[1]); 
     var a2 = Number(a.split('~')[0]); 
     var b2 = Number(b.split('~')[0]); 
     if(a2 != b2) 
     { 
      return 0; 
     } 
     else if(a_ != b_) 
     { 
      return a_ > b_; 
     } 
    }); 
    console.log(temp_arr); 


Here is jsFiddle

+1

уже рабочий код. это результат следующим образом. '' 0 ~ 0 "," 0 ~ 2 "," 2 ~ 0 "," 2 ~ 4 "," 2 ~ 7 "," 4 ~ 1 "," 4 ~ 3 "," 4 ~ 4 " "4 ~ 5", "4 ~ 6", "4 ~ 7", "4 ~ 8", "7 ~ 5", "7 ~ 7", "7 ~ 9" ' –

+0

Не работает как? – artm

+0

Я получаю вывод следующим образом. ["4 ~ 6", "0 ~ 2", "2 ~ 7", "2 ~ 0", "2 ~ 4", "4 ~ 3", "4 ~ 8" 7: "0 ~ 0" "4 ~ 5", "4 ~ 4", "4 ~ 7", "4 ~ 1", "7 ~ 7", "7 ~ 9", "7 ~ 5"] –

ответ

2

Если вы хотите более короткий фрагмент кода, используя вашу идею, вы можете использовать

var temp_arr = ["4~3", "4~6", "4~1", "4~8", "2~7", "2~0", "2~4", "7~5", "7~9", "7~7", "0~2", "0~0", "4~4", "4~5", "4~7"]; 

temp_arr.sort(function(a,b){ 
    var t = Number(a.split('~')[0]) - Number(b.split('~')[0]); 
    if (t == 0) 
     return Number(a.split('~')[1]) - Number(b.split('~')[1]); 
    else 
     return t; 
}); 

console.log(temp_arr); 

Надеется, что это помогает Dan

+0

Это кажется лучшим ответом на меня. Нет необходимости реализовывать свой собственный алгоритм сортировки. –

2

Вы можете использовать этот код:

var temp_arr = ["4~3", "4~6", "4~1", "4~8", "2~7", "2~0", "2~4", "7~5", "7~9", "7~7", "0~2", "0~0", "4~4", "4~5", "4~7"]; 

for(var i = 0; i < temp_arr.length; i++) 
{ 
    for(var it = 0; it < temp_arr.length-1; it++) 
    { 
     var it1 = temp_arr[it]; 
     var it2 = temp_arr[it+1]; 
     var right1 = Number(it1.split('~')[1]); 
     var right2 = Number(it2.split('~')[1]); 
     var left1 = Number(it1.split('~')[0]); 
     var left2 = Number(it2.split('~')[0]); 
     if(left1 > left2 || (right1 > right2 && left1 == left2)) 
     { 
      var temp = temp_arr[it]; 
      temp_arr[it] = temp_arr[it+1]; 
      temp_arr[it+1] = temp; 
     } 
    } 
} 
console.log(temp_arr); 

Он использует модифицированную версию пузырьковой сортировки.

Fiddle

Edit: Сделано это немного короче

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