HTML:html
1 <h3>字符串數組排序前</h3> 2 <div id="show5"></div> 3 <h3>排序後</h3> 4 <div id="show6"></div>
jquery:jquery
var animals = ['dog','cat','tiger','pig','bird']; $('#show5').html(animals.join('<br/>')); animals = animals.sort(); $('#show6').html(animals.join('<br/>'));
顯示結果:算法
字符串數組排序前 dog cat tiger pig bird 排序後 bird cat dog pig tiger
若是數組換成了數值數組呢?結果會什麼怎麼樣的?數組
以下:ide
HTML:函數
<h3>數值數組排序前</h3> <div id="show7"></div> <h3>排序後</h3> <div id="show8"></div>
jquery:spa
ar nums = ['12','2','5','36','4']; $('#show7').html(nums.join('<br/>')); nums = nums.sort(); $('#show8').html(nums.join('<br/>'));
顯示結果:code
數值數組排序前 12 2 5 36 4 排序後 12 2 36 4 5
很明顯,數值數組最後的排序結果不是咱們想要的。這是爲何呢?
由於sort()方法排序,是基於ASCII值進行排序的。故它會認爲36小於4(由於3的ASCII值小於4的ASCII值)。因此要對排序的sort()方法定義一個比較函數:htm
jquery:blog
ar nums = ['12','2','5','36','4']; $('#show7').html(nums.join('<br/>')); //定義了sort的比較函數 nums = nums.sort(function(a,b){ return a-b; }); $('#show8').html(nums.join('<br/>'));
顯示結果:
數值數組排序前 12 2 5 36 4 排序後 2 4 5 12 36
這纔是我想要的結果!
知識點:
1,sort(function(a,b){return a-b;})對傳入的一對值進行比較,而後返回的的值爲:小於0,大於0,等於0;(大於0交換位置,反之則不)
* 當小於0時,說明b>a,故b的排序靠後(即不變).
* 當大於0時,說明a>b,故a的排序靠後.
* 當等於0時,說明a=b,故不改變排序.
若是對數值數組的值進行降序排序。那麼只要把返回的值改成b-a!
我的以爲這個方法包含了排序算法的實現過程