2016-12-05 4 views
1

Я написал функцию для упорядочивания массивов по последнему символу, , но я обнаружил, что при выполнении функции есть mushrooms5 и Sauce6. Может ли кто-нибудь помочь мне решить ошибку, потому что я не могу ее найти?Ошибка при сортировке массивов по JavaScript

Спасибо.

var Dish_name = [ 
    "Layered_Dip2", 
    "Pumpkin_Deviled_Eggs1", 
    "Chinese_fried_egg_noodles_with_shredded_pork_mushrooms5", 
    "Stir_fried_Clams_with_Garlic_and_Black_Bean_Sauce6", 
    "Rosewater_Panna_Cotta4", 
    "Marshmallow_Rabbit3", 
] 

var Dish_show_name = [ 
    "<b>Layered Dip</b>", 
    "<b>Pumpkin Deviled Eggs</b>", 
    "<b>Chinese Fried Egg Noodles with Shredded Pork Mushrooms</b>", 
    "<b>Stir fried Clams with Garlic and Black Bean Sauce</b>", 
    "<b>Rosewater Panna Cotta</b>", 
    "<b>Marshmallow Rabbit</b>", 
] 

var Dish_url = [ 
    "http://3.1m.yt/BqHJBVM.jpg", 
    "http://4.1m.yt/2yq6CpE.png", 
    "http://3.1m.yt/k-owd2.jpg", 
    "http://4.1m.yt/zvcLufM.png", 
    "http://3.1m.yt/Fw9Wdcw.png", 
    "http://1.1m.yt/INLaIN-.jpg" 
]  

$("#cook").click(function() { 
    var i, j, temp, temp2, temp3; 
    for (i = 0; i < 6; i++) { 
     for (j = 1; j < 6; i++) { 
      if (Dish_name[i].slice(-1) > Dish_name[j].slice(-1)) { 
       temp = Dish_name[i]; 
       temp2 = Dish_show_name[i]; 
       temp3 = Dish_url[i]; 
       Dish_name[i] = Dish_name[j]; 
       Dish_show_name[i] = Dish_show_name[j]; 
       Dish_url[i] = Dish_url[j]; 
       Dish_name[j] = temp; 
       Dish_show_name[j] = temp2; 
       Dish_url[j] = temp3; 
       alert(Dish_name[i]); 
       alert(Dish_name[j]); 
       alert(Dish_name[i].slice(-1)); 
       alert(Dish_name[j].slice(-1)); 
      } 
     } 
    } 
}) 
+2

Какая ошибка? в чем проблема? – Dekel

+0

@Dekel Правильно, что 'm' сортируется после' S', потому что это строчный. – andlrc

+0

@Dekel Я думаю, что это третий, который будет соответствовать второму, после сортировки 1,2,5,6,4,3 .... , но я не знаю, как это исправить ... – kennytsz

ответ

1

Проблема в том, что ваш пузырь-сортировка; внутренний цикл должен быть:

for (i = 0; i < 6; i++) { 
    for (j = i + 1; j < 6; j++) { 
      ^^^^^  ^

Внутренний цикл должен работать от следующего элемента после текущего i, не начиная с 1 каждый раз, когда круглым. И я только заметил, что внутренний цикл также увеличивает i, а не j!

+0

Вы избили меня до Это! знак равно –

0

Вот хорошая реализация сортировки пузырьков в JavaScript, и она немного более компактна и исправляет ошибку переменной в вашем цикле.

function bubble(arr) { 
     var len = arr.length; 

     for (var i = 0; i < len ; i++) { 
     for(var j = 0 ; j < len - i - 1; j++){ // there was an error in your code here 
     if (arr[j] > arr[j + 1]) { 
      // swap 
      var temp = arr[j]; 
      arr[j] = arr[j+1]; 
      arr[j + 1] = temp; 
     } 
     } 
     } 
     return arr; 
    } 

document.write(bubble([1,9,2,3,7,6,4,5,5])); 
Смежные вопросы