2013年3月22日 星期五

JS 學習Array sort





Array的Sort真的很有趣
有時候可省去很多工
我應該要好好學習!
var _array = [1111, 0, 33, 2];
_array.sort();
//_array = [0, 1111, 2, 33];


看起來應該都是用字串(lexicographical order)
由小到大排序,0->9 A-> Z
如果要反轉,就用reverse()
var _array = [1111, 0, 33, 2];
_array.sort();
_array.reverse();
//_array = [33, 2, 1111, 0];

如果要特殊排序,sort可以丟function參數
array.sort(sortfunction);
function sortfunction(a, b){
  //Compare "a" and "b" in some fashion, and return -1, 0, or 1
  //小於0:不變,"a"索引值應該要小於"b"
  //等於0:不變,"a"索引值"b"不變,不sorting
  //大於0:交換,"b"索引值應該要小於"a"  
}

所以當你想要以數字進行排序,可以使用上面的原則
var _array = [1111, 2, 333, 0];
_array.sort(function(a,b){
 return a - b;
});

倒序的話可以改成
return b - a;
或是
_array.reverse();
最後,今天最大的學習,若你想要random陣列
var _array = [1111, 2, "SIMON", "AMY", 333, "SAY", 0];
_array.sort(function(a,b){
 //介於-0.5~0.5中間
 return 0.5 - Math.random();
});
//_array = ["SIMON", 1111, 2, "SAY", "AMY", 333, 0] 

他真的很方便,如果array索引是物件
在sortfunction裡面,你可以用
return a.property - b.property;
去做比較!不用太可惜了啦!

參考:
http://hungred.com/how-to/tutorial-sort-array-javascript/
http://www.javascriptkit.com/javatutors/arraysort.shtml